
入力する次の行があるとしますawk
。
dolly-cabinet-93-red
murfy-swan-96-white
chizzle-rock-115-green
-
3番目の列で最大の(数字)行を選択してその行を出力する方法(好ましくはを使用しますawk
が、これに限定されません)は何ですか?
なぜか96のソリューションが最大だと思います。
答え1
私はあなたが何らかの並べ替えをしていると推測しています。この場合(afterのため)96
後にソートされます。115
9
1
awk -F '-' '$3 > max { max = $3; line = $0 } END { print line }' file
与えられたデータに対して以下が出力されます。
chizzle-rock-115-green
コードは、区切られた3番目の-
フィールドを現在見つかった最大数()とmax
比較します。フィールドの数がより高い場合は、その数max
で更新され、現在の入力行がに保存されますline
。line
これは線形操作なので、ソートよりもやや高速ですが(ソートはせいぜいO(n*log(n))
)、データが多いと大きな違いはありません。
答え2
sort
+使用の代替head
:
sort -t'-' -k3nr file | head -1
出力:
chizzle-rock-115-green