最初と2番目の列の値が一致する行のマージ

最初と2番目の列の値が一致する行のマージ

データを含むファイルがありますが、awkを介して実装したいと思います。どうすればいいですか?

111,10.1.1.1,,20
111,10.1.1.1,21,
112,10.1.1.2,10,
112,10.1.1.2,,15

予想出力:

111,10.1.1.1,21,20
112,10.1.1.2,10,15

ベストアンサー1

努力する:

$ awk -F',+' '{a[$1","$2]=a[$1","$2]","$3} END{for (ip in a)print ip a[ip]}' file | sort
111,10.1.1.1,20,21
112,10.1.1.2,10,15

どのように動作しますか?

  • -F',+'

    これは awk に、1 つ以上のコンマで構成される任意のシーケンスをフィールド区切り文字として使用するように指示します。

  • a[$1","$2]=a[$1","$2]","$3

    a各行に対して、最初の2つのフィールドのキーの下にある連想配列の項目に3番目のフィールドを追加します。

  • END{for (ip in a)print ip a[ip]}

    ファイルの終わりに達すると、配列の各キーを印刷し、その後にaそのキーの値を印刷します。a

  • sort

    このオプションのステップは出力をソートします。ソートが重要な場合は、sort目的の結果(語彙対数など)を得るためにオプションを調整する必要があります。

おすすめ記事