我有一个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
请帮助,因为我甚至无法想到解决方案,而且我的文件中有数百万个这样的值......
答案 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