Skip to main content
 首页 » 编程设计

python之查找模式并打印下一列(两个文件)

2025年05月04日10www_RR

我想在 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