【发布时间】:2014-03-09 06:54:00
【问题描述】:
我想在 File2 的 File1 的第 1 列中查找模式,然后在 File2 旁边打印 File1 的第二列:
File1(两列制表符分隔):
APBW lung
APCA non virulent
ABKM lung
APBX lung
KK020 -
APBZ non virulent
AOSU lung
APBY non virulent
APBV joint; lung; CNS
CP001321 virulent
APBT virulent
APBU non-virulent
APCB moderadamente virulenta (nose)
CP005384 -
File2(两列制表符分隔):
HS372_00243 gi|219690483|gb|CP001321.1|
HS372_00436 gi|529264994|gb|APBX01000055.1|
HS372_00445 gi|529256455|gb|APBT01000061.1|
HS372_00544 gi|529259149|gb|APBV01000035.1|
HS372_00545 gi|529259149|gb|APBV01000035.1|
HS372_00546 gi|529259149|gb|APBV01000035.1|
所需的输出(三列制表符分隔):
HS372_00243 gi|219690483|gb|CP001321.1| virulent
HS372_00436 gi|529264994|gb|APBX01000055.1| lung
HS372_00445 gi|529256455|gb|APBT01000061.1| virulent
HS372_00544 gi|529259149|gb|APBV01000035.1| jointlungCNS
HS372_00545 gi|529259149|gb|APBV01000035.1| jointlungCNS
HS372_00546 gi|529259149|gb|APBV01000035.1| jointlungCNS
临时 bash 代码(不工作),但对其他语言开放:
while read vl; do grep "$vl" File2 ; done < File1
还尝试使用 awk(不工作,因为它似乎正在寻找完全匹配并且我在 File2 中的字符串被其他东西包围):
awk 'BEGIN { FS = OFS = "\t" } FNR==NR{a[$1]=$0;next}($1 in a){print a[$1],$2,$3}' File1 File2
谢谢,伯纳多
【问题讨论】:
-
不清楚你从文件1到文件2使用的模式。有时是同一个,有时是前四个字母...
-
File1 中的模式长度不同
-
我的意思是,给定您的示例文件 1,当在文件 2 中找到
APBX01000055时不应写入任何内容,因为APBX01000055不在文件 1 中。 -
好的,我明白了。问题是我想打印 'lung' 只需找到不完整的 'APBX' 字符串
-
嗯,这不一致。如果我们得到这个,那么这意味着我们必须检查 4 个字符。但是
CP001321会发生什么?
标签: python perl bash awk bioinformatics