比较两个文件的两个字段,如果它们不匹配则打印

时间:2014-07-07 15:34:54

标签: python awk sed

我有两个文件。 如果File1的Column1没有进入File2的Column1,则在输出文件中打印整行File1。 如果两个文件的Column1匹配,并且File1的Column2的值说" N"大于" N + 10"或者小于" N-10"而不是File2的Column2的值,然后才打印整行File1。

File1中:

C1  23
C1  24
C2  66
C3  88
C6  100 
C7  79
C20 200

文件2:

C1  44
C1  35
C2  70 
C4  88
C6  92
C7  90
C9  80

预期输出:

C1  23
C1  24
C3  88
C7  79
C20 200

感谢您帮助解决这个问题。 谢谢。

2 个答案:

答案 0 :(得分:1)

使用awk即可:

awk '
NR==FNR { 
    lines[NR,"col1"] = $1
    lines[NR,"col2"] = $2
    lines[NR,"line"] = $0
    next
}
(lines[FNR,"col1"] != $1) {
        print lines[FNR,"line"]
        next
}
(lines[FNR,"col2"]+10 < $2 || lines[FNR,"col2"]-10 > $2) {
        print lines[FNR,"line"]
}' file1 file2
C1  23
C1  24
C3  88
C7  79
C20 200
  • 我们读取第一个文件并使用行号和字段作为键创建一个多维数组,并适当地存储column1,column2和行。
  • 当我们迭代第二个文件时,我们会将检查保留在原位并打印出与检查点匹配的行。

答案 1 :(得分:0)

由于您只有两列我建议使用paste合并它们,这将使awk的逻辑变得更加容易:

paste file1 file2 | awk '{ if($1 != $3){print $1,$2}else if($4 > ($2 + 10) || $4 < ($2 -10 )){print $1,$2} }'
C1 23
C1 24
C3 88
C7 79
C20 200