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

2024-09-29 01:24:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两份文件。 如果File1的Column1不匹配File2的Column1,那么在输出文件中打印File1的整行。 如果两个文件的Column1匹配,并且File1的Column2的值说“N”大于“N+10”或小于“N-10”,则只打印File1的整行。在

文件1:

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

文件2:

^{pr2}$

预期输出:

C1  23
C1  24
C3  88
C7  79
C20 200

如果你能帮我解决这个问题,我会很感激的。 谢谢您。在


Tags: 文件file1file2c2我会column1c1c3
2条回答

使用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和lines。在
  • 当我们迭代第二个文件时,我们将检查保持在适当的位置,并打印与检查点匹配的行。在

由于您只有两个列,我建议使用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

相关问题 更多 >