模式匹配和删除整行

Nam*_*ata 1 sed awk python perl text-processing

如果 File1 的 Column1 与 Column 1 File2 完全匹配,我想删除文件 1 的所有行。

文件 1:

r001:21:10    21    AAAAAATTTGC    *     =    XM:21
r002:21:10    21    YAAAATTTGC     *     =    nM:21
r001:21:10    21    TTAAAATTTGC    *     =    XM:21
r0012:21:10   21    LLAAAATTTGC    *     +    XM:21
r001:21:10    21    AAAAAATTTGC    *     =    GM:21
Run Code Online (Sandbox Code Playgroud)

文件2:

r001:21:10
r001:21:20
r002:41:36
r002:41:99
r002:41:87
r0012:21:1
Run Code Online (Sandbox Code Playgroud)

预期输出:

r002:21:10    21    YAAAATTTGC     *     =    nM:21
r0012:21:10   21    LLAAAATTTGC    *     +    XM:21
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 6

你可以使用这个awk

$ awk 'FNR==NR {a[$i]; next}; !($1 in a)' f2 f1
r002:21:10    21    YAAAATTTGC     *     =    nM:21
r0012:21:10   21    LLAAAATTTGC    *     +    XM:21
Run Code Online (Sandbox Code Playgroud)

解释

  • FNR==NR {a[$i]; next}它读取第一个文件并将内容保存到a数组中。
  • !($1 in a)在读取第二个文件时,它会检查第一个字段是否在a数组中。如果不是,则打印该行。