比较两个文件的两个字段并打印不匹配的情况
我有两个文件。
如果文件1的第一列和文件2的第一列不匹配,就把文件1的整行内容打印到输出文件里。
如果两个文件的第一列匹配,并且文件1的第二列的值,比如说"N",大于"N+10"或者小于"N-10"时,才会把文件1的整行内容打印出来。
文件1:
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
因为你只有两列数据,我建议你使用 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
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
- 我们读取第一个文件,并创建一个多维数组,使用行号和字段作为键,把第一列、第二列和行内容适当地存储起来。
- 当我们处理第二个文件时,保持检查条件,如果符合条件就打印出这一行。