kshの2つのフィールドに基づいてソート

kshの2つのフィールドに基づいてソート
file-
xyz.161209:/userlogs/logs/reports 355G 195G 150G 57% /home
xyz.161209:/userlogs/logs/reports 355G 197G 148G 58% /home
xyz.161209:/userlogs/logs/reports 355G 201G 145G 59% /home
xyz.161210:/userlogs/logs/reports 355G 218G 129G 63% /home
xyz.161210:/userlogs/logs/reports 355G 223G 124G 65% /home
xyz.161210:/userlogs/logs/reports 355G 226G 121G 66% /home
xyz.161211:/userlogs/logs/reports 355G 210G 136G 61% /home
xyz.161211:/userlogs/logs/reports 355G 220G 127G 64% /home
xyz.161211:/userlogs/logs/reports 355G 173G 171G 51% /home

Result
xyz.161209:/userlogs/logs/reports 355G 201G 145G 59% /home
xyz.161210:/userlogs/logs/reports 355G 226G 121G 66% /home
xyz.161211:/userlogs/logs/reports 355G 220G 127G 64% /home

ソートされた日付を含む最初の列ごとに、最初の列に基づいてグループ化し、最も高い割合を持つ5番目の列を含む行のみを表示します。

以下は私が試したことですが、目的の結果を得ることはできません。誰でも私を助けることができますか?

awk -F, '{if ((a[substr($1,5,6)] == substr($1,5,6)) && (b[substr($5,1,2)] < substr($5,1,2)))b[substr($5,1,2)]=substr($5,1,2);}END{for(i in a){print i,a[i];}}' test.txt

ベストアンサー1

これが私が思いついたものです。これが最も効率的な方法だと思い、より効率的なものを見たいです。ただし、操作は完了です。

sort test.txt | awk -F':' '{print $1}' | uniq > unique.txt

while read p; do
  grep $p test.txt | sort -r -k5 | head -1
done < unique.txt
rm unique.txt

説明する:

sort test.txt | awk -F':' '{print $1}' | uniq > unique.txt リストからすべての一意のファイル名を抽出します。

grep $p test.txt | sort -r -k5 | head -15番目のフィールド(%値を含む)に基づいて降順に並べ替え、最初の行のみを印刷します。

おすすめ記事