删除两列前 4 个字符之间包含重复字符串的行

删除两列前 4 个字符之间包含重复字符串的行

我有一个包含 4 列和 7,000 行的大文件。我需要删除第二列的开头与第四列的开头相同的行。

输入:

Gator_locus75   AATTCCATGTACG   Gator_locus23   CTAGAGGAAGT
Gator_locus18   AATTCCATTATGG   Gator_locus14   AATTCAAAAAAT
Gator_locus13   CTAGAACCCACC    Gator_locus72   CTAGAATGTATG
Gator_locus16   AATTCATCCTCT    Gator_locus15   CTAGATTGCCAA
Gator_locus24   CTAGAGCTGCTG    Gator_locus12   AATTCAGTCCAC

输出:

Gator_locus75   AATTCCATGTACG   Gator_locus23   CTAGAGGAAGT
Gator_locus16   AATTCATCCTCT    Gator_locus15   CTAGATTGCCAA
Gator_locus24   CTAGAGCTGCTG    Gator_locus12   AATTCAGTCCAC

我需要删除第二列中的字符串以“AATT”开头且同一行第四列中的字符串以“AATT”开头的行。当第二列中的字符串以“CTAG”开头且第四列中的字符串以“CTAG”开头时,我还需要执行相同的操作。

答案1

要打印第 2 列的前 4 个字符不等于第 4 列的前 4 个字符的行:

awk 'substr($2, 1, 4) != substr($4, 1, 4)' < input

这使用主代码作为“测试”来查看是否应该打印一行;没有明确的操作部分,因为默认打印操作就是我们想要的。主代码只是从每列中提取前四个字符并进行比较。

答案2

删除第二个字段开头的行AATT 第四个字段以AATT, 开头,与 相同CATG

awk '($2 !~ /^AATT/ && $4 !~ /^AATT/) && ($2 !~ /^CTAG/ && $4 !~ /^CTAG/) {print}' /path/to/file

作为更通用的解决方案:

awk 'substr($2,1,4) != substr($4,1,4) {print}' /path/to/file

相关内容