列3の最小値と最大値を見つけて、行全体を印刷します。

列3の最小値と最大値を見つけて、行全体を印刷します。

3つの列で構成される大規模なデータセットがあります。 3番目の列で最大値と最小値を見つけて(ゼロと負の数が混在しているので、最大値と最小の負の値を探したい)、特定の行を印刷できるようにしたいです。どうすればいいですか?

入力例:

-6.4 -3.6 -0.00
-6.4 -3.5 -0.00
-6.4 -3.5 -0.00
-6.4 -3.5 -0.00
.
.
.
-2.4 -1.6 -14.50
-2.4 -1.5 -14.49
-2.4 -1.5 -14.49
-2.4 -1.5 -14.49
.
.
.
-5.4 -2.6 -4.52
-5.4 -2.6 -4.53
-5.4 -2.6 -4.50
-5.4 -2.6 -0.00
-5.4 -2.6 -0.00

出力:最小:-2.4 -1.6 -14.50

最大値:-5.4 -2.6 -4.50

ベストアンサー1

答えを受け入れましたが、より簡単な方法は次のとおりです。

egrep -v "0.00|^\." file.txt | awk 'NR==1 {print "min:",$0} END{print"max:",$0}'

出力:

min: -2.4 -1.6 -14.50
max: -5.4 -2.6 -4.50

- 0が不要なため、実際には最大数であっても、このegrep -vコマンドは0.00を含み、「.」で始まる行を除くすべての行を印刷します。

- 上記の作業が完了すると、行が小さいものから大きなものの順にまとめられました。awk次に、「min:」プレフィックスがある最初の行と「max:」プレフィックスがある最後の行を印刷します。

その列の値が順序が間違っている場合は、sort -k3コマンドの後にパイプしてから(ソートしたい3番目の列であると仮定して)、それに続くコマンドにegrepパイプすることができます。awk

おすすめ記事