最初の列に基づいて3番目の列を表示し、2番目の列を変更せずに保持する方法

最初の列に基づいて3番目の列を表示し、2番目の列を変更せずに保持する方法

次の例を含むテキストファイルがあります。

a | 0 | 11

a | 0 | 22

a | 1 | 22

a | 1 | 22

私は次のコマンドを使用しています:

awk -F"|" '{ sum[$1"|"$2]+=$3 } END { for (user in sum) printf "%10d |%12.2f\n",user,sum[user] }' myfile

結果を生む

0 |       33.00
0 |       44.00

私の予想結果

a | 0 | 33

a | 1 | 44

答え1

あなたの声明を修正してくださいprintf

awk -F'|' '
    {sum[$1"|"$2]+=$3}
    END{for (i in sum){printf "%s| %d\n",i,sum[i]}}
' file

出力:

a | 0 | 33
a | 1 | 44

SQLの場合、これは非常に簡単な作業でもあります。

csvsql -d '|' -H --tables t \
--query 'select trim(a),b,sum(c) from t group by a,b' \
<(grep -v '^$' file)

出力:

trim(a),b,sum(c)
a,0,33
a,1,44

| tail -n+2ヘッダー行を削除するには、追加して| csvformat -D '|'区切り記号をに変更します|

出力:

a|0|33
a|1|44

関連情報