awkの2次元配列


行列

1 2
1 3
2 100

(1)2次元配列に代入。
方法1:まずは手で直接書いて配列に代入。

$ awk 'BEGIN{a["1a2"]=1;a["1a3"]=1;a["2a100"]=1;for(i in a){split(i,k,"a");pr
int k[1],k[2],a[i]}}'
1 2 1
1 3 1
2 100 1

方法2:ファイルから

$ awk '{a[$1"a"$2]=1;}END{for(i in a){split(i,k,"a");pr
int k[1],k[2],a[i]}}' inputfile
1 2 1
1 3 1
2 100 1


(2)1列目の共通するものの2列目の
和を求める。

$ awk 'BEGIN{a["1a2"]=1;a["1a3"]=1;a["2a100"]=1;for(i in a){split(i,k,"a");su
m[k[1]]=sum[k[1]]+k[2]};for(i in sum){print i,sum[i];}}'
1 5
2 100

ファイルから読み取る場合

$ awk '{a[$1"a"$2]=1;}END{for(i in a){split(i,k,"a");sum[k[1]]=sum[k[1]]+k[2]
};for(i in sum){print i,sum[i];}}' inputfile
1 5
2 100