合并具有匹配的第一列和第二列值的行

合并具有匹配的第一列和第二列值的行

我有一个包含数据的文件,我希望通过 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 使用一个或多个逗号的任意序列作为字段分隔符。

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

    a对于每一行,我们将第三个字段附加到前两个字段的键下的关联数组中的条目中。

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

    到达文件末尾后,我们打印出数组的每个键,后跟该键a的值。a

  • sort

    此可选步骤对输出进行排序。如果排序对您很重要,您可能需要调整选项以sort获得您想要的结果(例如词汇与数字)。

相关内容