6

私はの初心者AWKなので、それを学ぶのを手伝ってください。名前付きのテキスト ファイルがsndあり、その値は次のとおりです。

1 0 141
1 2 223
1 3 250
1 4 280

3列目の値が最小のときに行全体を印刷したい

4

7 に答える 7

19

これはそれを行う必要があります:

awk 'NR == 1 {line = $0; min = $3}
     NR > 1 && $3 < min {line = $0; min = $3}
     END{print line}' file.txt

編集

これが行うことは次のとおりです。

  • 最初の行とその 3 番目のフィールドを思い出してください。
  • 他の行について、3 番目のフィールドがこれまでに見つかった最小値よりも小さい場合は、その行とその 3 番目のフィールドを覚えておいてください。
  • スクリプトの最後で、行を出力します。

テストNR > 1はスキップできることに注意してください。1 行目は$3 < minfalse になります。3 番目の列が常に正 (負ではない) であることがわかっている場合は、スクリプトの先頭にある の値がゼロであるため、NR == 1 ...テストをスキップすることもできます。min

EDIT2

これはより短いです:

awk 'NR == 1 || $3 < min {line = $0; min = $3}END{print line}' file.txt
于 2012-10-27T12:05:52.933 に答える
8

あなたがしawkたいことをする必要はありません。使用するsort

sort -nk 3 file.txt | head -n 1

結果:

1 0 141
于 2012-10-27T10:25:10.927 に答える
3

これに対する簡単な答えは次のとおりです。

sort -k3,3n temp|head -1

awk を要求したため:

awk '{if(min>$3||NR==1){min=$3;a[$3]=$0}}END{print a[min]}' your_file

しかし、私は常に短い方が好きです。

于 2012-10-29T07:32:56.447 に答える
2

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意味をなさない部分については、読んで理解してください。

于 2012-10-28T04:35:41.880 に答える
0
awk -F ";" '(NR==1){a=$NF;b=$0} {a=$NF<a?$NF:a;b=$NF>a?b:$0} END {print b}' filename

これにより、最初に検出された最小値の行が出力されます。

于 2015-12-01T01:03:04.167 に答える
0
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]

于 2016-11-22T22:09:14.120 に答える
0

任意の列の最小値を計算するには、最後の列としましょう

awk '(FNR==1){a=$NF} {a=$NF < a?$NF:a} END {print a}'

これは、列の最小値のみを出力します。

完全な行が必要な場合は、次を使用することをお勧めしますsort

sort -r -n -t [delimiter] -k[column] [file name]
于 2015-12-01T00:43:50.247 に答える