同じ表の最初の列に与えられた項目に基づいて、下の表の列にリストされている数値を合計したいと思います。表の内容は次のとおりです。
10,Mumbai,0,4,5,0,6,3,55,M
2,Mumbai,1,3,2,0,4,4,4,M
4,Chennai,5,6,7,8,9,0,6,F
予想される結果は次のとおりです(2番目と最後の列にグループ化されたデータ)。
12,Mumbai,1,7,7,0,10,7,59,M
4,Chennai,5,6,7,8,9,0,6,F
Linuxでawkを使用してこの出力を取得するにはどうすればよいですか?
ベストアンサー1
$ cat tst.sh
#!/usr/bin/env bash
awk '
BEGIN { FS=OFS="," }
$2 != vals[2] {
if ( NR>1 ) {
prt()
}
split($0,vals)
next
}
{
for ( i=1; i<=NF; i++ ) {
if ( $i+0 == $i ) {
vals[i] += $i
}
}
}
END {
prt()
}
function prt( i) {
for (i=1; i<=NF; i++) {
printf "%s%s", vals[i], (i<NF ? OFS : ORS)
}
}
' "${@:--}"
$ ./tst.sh file
12,Mumbai,1,7,7,0,10,7,59,M
4,Chennai,5,6,7,8,9,0,6,F
入力ファイルがまだ2番目のフィールドにグループ化されていない場合(公開された入力例のように)、以下を変更します。
awk '...' "${@:--}"
これに関して:
sort -t',' -k2,2 "${@:--}" | awk '...'