awk匹配前两列的值并在空白字段中打印

时间:2016-10-08 06:55:32

标签: linux bash awk pattern-matching

我有一个csv文件,如下所示:

2212,A1,  
2212,A1,128  
2307,B1,  
2307,B1,107

如果前2列的值相同,如何在第3列中复制第3列的值代替缺失值。例如前两行的前两列是相同的,因此它应该自动打印第一行第三列缺失位置的第二行第3列的值。

预期产出:

2212,A1,128  
2212,A1,128  
2307,B1,107  
2307,B1,107

请帮助,因为我甚至无法想到解决方案,而且我的文件中有数百万个这样的值......

2 个答案:

答案 0 :(得分:1)

如果您以相反的顺序首先sort该文件,则数据行将以空行开头:

$ sort -r file
2307,B1,107
2307,B1,
2212,A1,128
2212,A1,

然后使用以下awk来处理sort的输出:

$ sort -r file | awk 'NR>1 && match(prev,$0) {$0=prev} {prev=$0} 1'
2307,B1,107
2307,B1,107
2212,A1,128
2212,A1,128

答案 1 :(得分:0)

awk -F, '{a[$1FS$2]++;b[$1FS$2]=$NF}END{for (i in b) {for(j=1;j<=a[i];j++) print i FS b[i]}}' file