やりたいこと
例えば下記のようなデータがあった時に、1列目をグループとして、2列目の最小値と3列目の最大値を抽出します。
もともとのデータ
cat input.txt
hoge 10 10
hoge 20 30
hoge 30 20
fuga 1 5
fuga 10 10
集計後
cat output.txt
hoge 10 30
fuga 1 10
AWKのコード
# input.txtの生成
cat << EOF > input.txt
hoge 10 10
hoge 20 30
hoge 30 20
fuga 1 5
fuga 10 10
EOF
# 集計コード
cat input.txt |
awk '{if(min[$1] == "") min[$1]="inf"
if(min[$1]>$2) min[$1]=$2
if(max[$1]<$3) max[$1]=$3}
END{for(key in min) print key, min[key], max[key]}' \
> output.txt
工夫したところ
最小値を求めるときにはawkがとり得る最大値inf
を代入します。
そのためにif(min[$1]) == 0
でmin[$1]
で、min[$1]の空配列の生成を行っています。