1.仕様
以下のデータがあります。
11,121,神奈川県,横浜市,5,4,1,1
11,122,神奈川県,川崎市,6,5,1,1
11,121,神奈川県,横はま市,5,6,1,1
11,123,神奈川県,川崎市,7,7,1,1
1列目と2列目がキーで、キー重複の場合:
5列目と6列目の数字を合算して、3列目と4列目は先頭勝ちで以下のように出力
11,121,神奈川県,横浜市,10,10,2,2
上記の仕様でシェルを用意する。
2.実装
#!/bin/bash
input="input.txt"
awk -F',' '
{
key = $1 "," $2
if (!(key in seen)) {
# 最初に出現した行の3列目と4列目を記録
col3[key] = $3
col4[key] = $4
sum5[key] = $5
sum6[key] = $6
sum7[key] = $7
sum8[key] = $8
seen[key] = 1
} else {
# 既に見たキー:数値だけ加算
sum5[key] += $5
sum6[key] += $6
sum7[key] += $7
sum8[key] += $8
}
}
END {
for (k in seen) {
split(k, parts, ",")
print parts[1] "," parts[2] "," col3[k] "," col4[k] "," sum5[k] "," sum6[k] "," sum7[k] "," sum8[k]
}
}
' "$input" | sort > output.txt
コメント欄