文字列の一部に対して数値比較を実行し、一致する行を出力するにはどうすればよいですか?

文字列の一部に対して数値比較を実行し、一致する行を出力するにはどうすればよいですか?

入力する次の行があるとしますawk

dolly-cabinet-93-red
murfy-swan-96-white
chizzle-rock-115-green

-3番目の列で最大の(数字)行を選択してその行を出力する方法(好ましくはを使用しますawkが、これに限定されません)は何ですか?

なぜか96のソリューションが最大だと思います。

ベストアンサー1

私はあなたが何らかの並べ替えをしていると推測しています。この場合(afterのため)96後にソートされます。11591


awk -F '-' '$3 > max { max = $3; line = $0 } END { print line }' file

与えられたデータに対して以下が出力されます。

chizzle-rock-115-green

コードは、区切られた3番目の-フィールドを現在見つかった最大数()とmax比較します。フィールドの数がより高い場合は、その数maxで更新され、現在の入力行がに保存されますlineline

これは線形操作なので、ソートよりもやや高速ですが(ソートはせいぜいO(n*log(n)))、データが多いと大きな違いはありません。

おすすめ記事