awk テキスト処理では制限値を使用します。

awk テキスト処理では制限値を使用します。

このようなtxtファイルがあります。

32 1
32 2
32 3
32 4
32 5
17 8
17 9
17 10
17 11
14 33
14 34
14 35

このようなtxtファイルを取得したい!そのため、フィールド2からフィールド1の値の最小値と最大値を取得して印刷します。

32 1 5
17 8 11
14 33 35

どんなアイデアがありますか?ありがとうございます。

答え1

使用datamash:

datamash -t ' ' -g 1 min 2 max 2 < file

出力:

32 1 5
17 8 11
14 33 35

答え2

使用awk:

awk 'min[$1] == "" || $2 < min[$1] { min[$1] = $2 }
     max[$1] == "" || $2 > max[$1] { max[$1] = $2 }
     END { for (i in min) print i, min[i], max[i] }' file |
sort -rn

maxこれは、関連配列の最初の列に関連する最大値と最小値を覚えていますmin。すべてのデータが処理された後、値が印刷されます。

最後sort -rnに、出力が降順にソートされることを保証します。

答え3

入力した内容に基づいて並べ替え:

$ awk '$1 != p{printf "%s%s",max,$0; p=$1} {max=OFS $2 ORS}  END{printf "%s", max}' file
32 1 5
17 8 11
14 33 35

関連情報