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

标签 linux bash awk pattern-matching

我有一个如下所示的 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 -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/

相关文章:

python - 根据输入文件内容创建多个命名管道(fifo)

linux - 如何准确跟踪服务器上的连接

linux - 禁用嵌入式 Linux 闪屏上的登录提示

linux - 如何在shell中检索两个单词之间的所有代码?

linux - 群 - 脚本已完成但仍被锁定

csv - 如何为 CSV 文件中的字段添加引号?

C 动态链接到共享库抑制/处理 "cannot open shared object file" fatal error ,并继续链接

bash 脚本提取 LDAP 的域名

bash - 从函数内部检查脚本命令行参数

linux - 脚本的聚合输出