我想在 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
谢谢,伯纳多
请您参考如下方法:
像这样的东西听起来像你所要求的:
awk '
BEGIN { FS=OFS="\t" }
NR==FNR { map[$1] = $2; next }
{
for (key in map)
if ($0 ~ key)
$0 = $0 OFS map[key]
print
}
' file1 file2
