我有一个包含数据的文件,我希望通过 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
获得您想要的结果(例如词汇与数字)。