5500 5700
5600 5800
5700 5800
5600 5900
5900 6100
5900 6100
5900 6100
5800 6000
5800 6100
5900 6100
5800 6200
5700 5800
上記のように、2つの列を持つファイルがあります。最初の列の2行ごとに最小値を見つけ、2番目の列の2行ごとに最大値を見つける必要があります。 awkを使ってこれを達成するには?希望の出力は
Min Max
5500 5800
5600 5900
5900 6100
5800 6100
5800 6100
5700 6200
ベストアンサー1
$ awk 'BEGIN { print "Min", "Max" } {a=$1; b=$2; getline; print ($1<a?$1:a), ($2>b?$2:b)}' data.in
Min Max
5500 5800
5600 5900
5900 6100
5800 6100
5800 6100
5700 6200
このコードは、最初の列と2番目の列の現在の値をそれぞれおよびawk
変数に格納します。次に、次の行を明示的に読み取り、最初の列に最小値と新しい値を印刷し、2番目の列に最大値と新しい値を印刷します。a
b
a
b
($1 < a ? $1 : a)
三項演算子を使用して、?:
比較結果に基づいて値を比較して選択します。
タブ区切りの出力が必要な場合:
$ awk 'BEGIN {OFS="\t"; print "Min", "Max"} {a=$1; b=$2; getline; print ($1<a?$1:a), ($2>b?$2:b)}' data.in
Min Max
5500 5800
5600 5900
5900 6100
5800 6100
5800 6100
5700 6200