私はの初心者AWK
なので、それを学ぶのを手伝ってください。名前付きのテキスト ファイルがsnd
あり、その値は次のとおりです。
1 0 141
1 2 223
1 3 250
1 4 280
3列目の値が最小のときに行全体を印刷したい
私はの初心者AWK
なので、それを学ぶのを手伝ってください。名前付きのテキスト ファイルがsnd
あり、その値は次のとおりです。
1 0 141
1 2 223
1 3 250
1 4 280
3列目の値が最小のときに行全体を印刷したい
これはそれを行う必要があります:
awk 'NR == 1 {line = $0; min = $3}
NR > 1 && $3 < min {line = $0; min = $3}
END{print line}' file.txt
編集:
これが行うことは次のとおりです。
テストNR > 1
はスキップできることに注意してください。1 行目は$3 < min
false になります。3 番目の列が常に正 (負ではない) であることがわかっている場合は、スクリプトの先頭にある の値がゼロであるため、NR == 1 ...
テストをスキップすることもできます。min
EDIT2:
これはより短いです:
awk 'NR == 1 || $3 < min {line = $0; min = $3}END{print line}' file.txt
あなたがしawk
たいことをする必要はありません。使用するsort
sort -nk 3 file.txt | head -n 1
結果:
1 0 141
これに対する簡単な答えは次のとおりです。
sort -k3,3n temp|head -1
awk を要求したため:
awk '{if(min>$3||NR==1){min=$3;a[$3]=$0}}END{print a[min]}' your_file
しかし、私は常に短い方が好きです。
sort
何らかの理由で探しているのが、より大きなスクリプトでこれを行うための awk ロジックである場合、または余分なパイプを避けたい場合、またはこの質問の目的が awk について詳しく知ることでない限り、これは優れた答えだと思います.
$ awk 'NR==1{x=$3;line=$0} $3<x{line=$0} END{print line}' snd
バラバラに分解すると、これは次のとおりです。
NR==1 {x=$3;line=$0}
-- 1 行目に比較用の初期値を設定し、行を格納します。$3<x{line=$0}
- 各行で、3 番目のフィールドを保存した値と比較し、条件が真の場合は行を保存します。(これは でのみ実行できますがNR>1
、問題ではありません。END{print line}
-- 入力の最後に、保存した行を出力します。man awk
意味をなさない部分については、読んで理解してください。
awk -F ";" '(NR==1){a=$NF;b=$0} {a=$NF<a?$NF:a;b=$NF>a?b:$0} END {print b}' filename
これにより、最初に検出された最小値の行が出力されます。
awk 'BEGIN {OFS=FS=","}{if ( a[$1]>$2 || a[$1]=="") {a[$1]=$2;} if (b[$1]<$2) {b[$1]=$2;} } END {for (i in a) {print i,a[i],b[i]}}' input_file
|| a[$1]==""
フィールド 1 の最初の値が検出されたときに null が含まれるために使用しますa[$1]
。
任意の列の最小値を計算するには、最後の列としましょう
awk '(FNR==1){a=$NF} {a=$NF < a?$NF:a} END {print a}'
これは、列の最小値のみを出力します。
完全な行が必要な場合は、次を使用することをお勧めしますsort
。
sort -r -n -t [delimiter] -k[column] [file name]