熱のマージと追加

熱のマージと追加

次の内容を含むファイルがあります(最初の列を埋める余分なスペースを含む)。

  1 account1 192.168.0.1  
  1 account1 192.168.0.2   
 19 account2 192.168.0.1   
100 account3 192.168.0.3   
  1 account3 192.168.0.5

次の出力を取得しようとしています。

  2 account1 192.168.0.1, 192.168.0.2  
 19 account2 192.168.0.1  
101 account3 192.168.0.3, 192.168.0.5   

私はそれを繰り返して、アカウントに電子メールを送信するHTMLテーブルを作成します。次のコマンドを使用して各アカウントのIPリストを取得しました。

awk '{a[$2]=a[$2]" " $3}END{for (i in a) print i" " a[i]}' inputfile

ただし、最初の列も合計できません。

ベストアンサー1

合計をスクリプトに追加することはそれほど難しくありません。合計を保存する別の配列を追加するだけです。

$ awk '{ if (a[$2]) a[$2] = a[$2] ", ";
         a[$2] = a[$2] $3;
         sum[$2] += $1 }
       END {for (x in a) printf "%3d %s %s\n", sum[x], x, a[x]}' inputfile
  2 account1 192.168.0.1, 192.168.0.2
 19 account2 192.168.0.1
101 account3 192.168.0.3, 192.168.0.5 

(例出力のIPアドレスはカンマで区切られているため、これを追加しました。しかし、少なくともIPアドレスがないと、コードはよりきれいに見えます。)

おすすめ記事