AWK:最大列値が発生する行を取得します。

AWK:最大列値が発生する行を取得します。

5番目の列の最大値に興味があります。しかし、行の6番目と9番目の値を配列としてキャプチャすることもできます。どうすればいいですか?

以下のコマンドは、5番目の列値のみを取得しようとします。

myVar=$(bash myScript.sh | awk -v max=0 '{if($5>max){max=$5;max6=$6;max9=$9}}END{print $5}')

編集:print $ 5は列5の最大値を印刷します。

ありがとうございます。

ベストアンサー1

以下のような入力ファイルが与えられた場合(値が正であるか負であるかは重要ではありませんが、人々はしばしばこれが起こるという事実を忘れ、少なくとも1つの値が次より大きいと仮定するスクリプトを書くので、すべての負の数を使用します。これは重要なテストです。0、初期テストではうまく機能しましたが、実際の値が与えられてから6ヶ月後に現場で奇妙に失敗しました。

$ cat file
a b c d  -5 foo e f bar
a b c d  -3 is e f stuff
a b c d -17 this e f here

5番目、6番目、9番目の値を印刷する方法は次のとおりです(明らかに持っていない値を使用して)cat filebash myScript.sh

$ cat file | awk '(NR==1) || ($5>m[5]){ split($0,m) } END{ print m[5], m[6], m[9] }'
-3 is stuff

これをシェル変数に保存する場合は、最も簡単な方法はシェル配列に保存することです。たとえば、これらのフィールドの値によっては、これが必要な場合があります。

$ arr=( $(cat file | awk '(NR==1) || ($5>m[5]){ split($0,m) } END{ print m[5], m[6], m[9] }') )

$ declare -p arr
declare -a arr=([0]="-3" [1]="is" [2]="stuff")

おすすめ記事