我有一个包含20 000个探针的数据集,它们分为两列,每列21个。从这个文件中我需要提取探针1列中最后一个核苷酸与探针2列中最后一个核苷酸匹配的行。到目前为止,我尝试了AWK(substr)函数,但没有得到预期的结果。这是我试过的单线:
awk '{if (substr($2,21,1)==substr($4,21,1)){print $0}}'
另一种选择是在第2列和第4列(awk '$2~/[A-Z]$/
)中锚定最后一个字符,但我找不到使用正则表达式匹配两列中探针的方法。所有建议和意见将非常感谢。
数据集示例:
Probe 1 Probe 2
4736 GGAGGAAGAGGAGGCGGAGGA A GGAGGACGAGGAGGAGGAGGA
4737 GGAGGAAGAGGAGGGAGAGGG B GGAGGACGAGGAGGAGGAGGG
4738 GGAGGATTTGGCCGGAGAGGC C GGAGGAGGAGGAGGACGAGGT
4739 GGAGGAAGAGGAGGGGGAGGT D GGAGGACGAGGAGGAGGAGGC
4740 GGAGGAAGAGGAGGGGGAGGC E GGAGGAGGAGGACGAGGAGGC
期望的输出:
4736 GGAGGAAGAGGAGGCGGAGGA A GGAGGACGAGGAGGAGGAGGA
4737 GGAGGAAGAGGAGGGAGAGGG B GGAGGACGAGGAGGAGGAGGG
4740 GGAGGAAGAGGAGGGGGAGGC E GGAGGAGGAGGACGAGGAGGC
答案 0 :(得分:5)
这将过滤输入,匹配第二列的最后一个字符等于第四列的最后一个字符的行:
awk 'substr($2, length($2), 1) == substr($4, length($4), 1)'
与示例脚本相比,我改变了什么:
if
声明移出{ ... }
块进入过滤器length($2)
和length($4)
代替硬编码值21 { print $0 }
,因为这是匹配行的默认操作