打印所有行,但与awk变量匹配的行除外

打印所有行,但与awk变量匹配的行除外,awk,Awk,使用awk获取与变量匹配的行时,我有以下方法: for i in `cat file1`; do awk -v id="$i" '$0 ~ id' file2; done 我怎么能做相反的事呢? 得到不匹配的线条?我想我应该用!在某个地方,但不知道在哪里 文件1如下所示: 5NX1D 5NX3D 4NTYB 2R9PA IVGGYTCEENS 2RA3C RPDFCLEPPYT 6HARE YVDYKDDDDKE 4NTYB EYVDYKDDDDD 2R9PA IVGG

使用awk获取与变量匹配的行时,我有以下方法:

for i in `cat file1`; do awk -v id="$i" '$0 ~ id' file2; done
我怎么能做相反的事呢? 得到不匹配的线条?我想我应该用!在某个地方,但不知道在哪里

文件1如下所示:

5NX1D
5NX3D
4NTYB
2R9PA IVGGYTCEENS
2RA3C RPDFCLEPPYT
6HARE YVDYKDDDDKE
4NTYB EYVDYKDDDDD
2R9PA IVGGYTCEENS
2RA3C RPDFCLEPPYT
6HARE YVDYKDDDDKE
文件2如下所示:

5NX1D
5NX3D
4NTYB
2R9PA IVGGYTCEENS
2RA3C RPDFCLEPPYT
6HARE YVDYKDDDDKE
4NTYB EYVDYKDDDDD
2R9PA IVGGYTCEENS
2RA3C RPDFCLEPPYT
6HARE YVDYKDDDDKE
输出应如下所示:

5NX1D
5NX3D
4NTYB
2R9PA IVGGYTCEENS
2RA3C RPDFCLEPPYT
6HARE YVDYKDDDDKE
4NTYB EYVDYKDDDDD
2R9PA IVGGYTCEENS
2RA3C RPDFCLEPPYT
6HARE YVDYKDDDDKE
这是标准,除非我们在未找到匹配项时打印

awk'NR==FNR{a[$1];next} !$“文件1文件2>新建文件2”中的1 这一直是非常标准的Awk习惯用法,但非常简单,当我们遍历第一个输入文件file1时,当前文件FNR中的行号将等于整个输入行号NR。如果是这样,我们将其内容添加到数组a,并跳到下一行。否则,如果我们失败了,我们就不再是第一批人;如果第一个字段$1不在a中,则打印


您的原始脚本将更加惯用,而且更有效地使用类似的措辞,只是没有!,也一样。

请您发布输入和预期输出的示例。顺便说一句,谢谢。谢谢您的编辑,您想比较两个文件的第一个字段吗?请确认一下。是的,没错。我想从文件2中删除包含文件1中字段的行确定,请您在问题中发布预期输出,这将使问题更加清楚,谢谢。请参阅示例:我仍然是使用awk的新手。你能给我解释一下这是怎么回事吗?我补充了一个简短的解释。