2番目の列の最大値と1番目の列の最小値を一度に2つの行と比較します。

2番目の列の最大値と1番目の列の最小値を一度に2つの行と比較します。
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番目の列に最大値と新しい値を印刷します。abab

($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

おすすめ記事