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

Python 比较两个文件的两个字段,如果不匹配则打印,python,awk,sed,Python,Awk,Sed,我有两个文件。 如果File1的第1列与File2的第1列不匹配,则在输出文件中打印File1的整行。 如果两个文件的Column1都匹配,并且如果File1的Column2的值表示“N”大于File2的Column2的值“N+10”或小于File2的Column2的值“N-10”,则仅打印File1的整行 文件1: C1 23 C1 24 C2 66 C3 88 C6 100 C7 79 C20 200 C1 44 C1 35 C2 70 C4 88 C6 92 C

我有两个文件。 如果File1的第1列与File2的第1列不匹配,则在输出文件中打印File1的整行。 如果两个文件的Column1都匹配,并且如果File1的Column2的值表示“N”大于File2的Column2的值“N+10”或小于File2的Column2的值“N-10”,则仅打印File1的整行

文件1:

C1  23
C1  24
C2  66
C3  88
C6  100 
C7  79
C20 200
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:

C1  23
C1  24
C2  66
C3  88
C6  100 
C7  79
C20 200
C1  44
C1  35
C2  70 
C4  88
C6  92
C7  90
C9  80
C1  23
C1  24
C3  88
C7  79
C20 200
预期输出:

C1  23
C1  24
C2  66
C3  88
C6  100 
C7  79
C20 200
C1  44
C1  35
C2  70 
C4  88
C6  92
C7  90
C9  80
C1  23
C1  24
C3  88
C7  79
C20 200
如果你能帮我解决这个问题,我将不胜感激。
谢谢。

使用
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
awk'
NR==FNR{
行[NR,“col1”]=1美元
行[NR,“col2”]=2美元
行[NR,“行”]=0美元
下一个
}
(行[FNR,“col1”!=1美元){
打印行[FNR,“行”]
下一个
}
(行[FNR,“col2”]+10<$2 | |行[FNR,“col2”]-10>$2){
打印行[FNR,“行”]
}'文件1文件2
C1 23
C1 24
C3 88
C7 79
C20200
  • 我们读取第一个文件并创建一个多维数组,使用行号和字段作为键,并适当地存储column1、column2和行
  • 当我们迭代第二个文件时,我们将检查保持在适当的位置,并打印与检查点匹配的行
由于您只有两列,我建议使用
粘贴
来合并它们,这将使
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
粘贴文件1文件2 | awk'{if($1!=$3){print$1,$2}否则if($4>($2+10)|$4<($2-10)){print$1,$2}
C1 23
C1 24
C3 88
C7 79
C20200

您尝试了什么,遇到了什么问题?为什么这个标签是Python?喂。。我大部分时间都在尝试awk。我给Python添加了标签,看看是否有一个使用Python的快速解决方案。好吧,用Python做这件事非常简单,但无论如何,在我们告诉您它有什么问题之前,您必须发布一些代码!我是这个领域的新手。所以我试图用awk解决第一部分。awk“($1!=$2)”打印$0文件。我为错误的代码感到抱歉。但是我是一个初学者。awk是一个非常强大的工具。非常感谢。成功了。我正在使用这个代码。干杯