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

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

如果前2列的值相同,如何复制第3列的值来代替第3列中缺少的值。例如,前两行的前两列是相同的,所以自动打印第二行第三列的值,在第一行第三列的缺失处。
预期产量:
2212,A1,128
2212,A1,128
2307,B1,107
2307,B1,107

请帮助我,因为我甚至想不出解决方案,在我的文件中有数百万这样的值。。

最佳答案

如果首先以相反的顺序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

关于linux - 前两列的Awk匹配值并在空白字段中打印,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39929616/

10-11 15:45