首页 > 解决方案 > 比较具有不同字段分隔符的两个文件的不同列,而第二个文件的列数不相等

问题描述

我想将 file1 的第二列与 file2 的最后一列(物种名称)进行比较,如果它们匹配,则打印 file1 的第一列和 file2 的所有列。但是,这些文件包含不同的字段分隔符,并且第二个文件在__用作分隔符时具有不相等的列数。这两个文件都只包含唯一的行。我试图用 grep 和部分行匹配来解决这个问题,但是 awk 似乎更适合这个问题。

文件1:

AF074611.1  Yersinia pestis 
AE002160.2  Chlamydia muridarum 
AE002162.1  Chlamydia muridarum 
AE003849.1  Xylella fastidiosa

文件2:

o__Enterobacterales;f__Yersiniaceae;g__Yersinia;s__Yersinia pestis
o__Enterobacterales;f__Yersiniaceae;g__Yersinia;s__
o__Methylococcales;f__Crenotrichaceae;g__Crenothrix;s__Crenothrix polyspora
o__Methylococcales;f__;g__;s__
o__Xanthomonadales;f__Xanthomonadaceae;g__Xylella;s__
o__Xanthomonadales;f__Xanthomonadaceae;g__Xylella;s__Xylella fastidiosa
o__Xanthomonadales;f__Xanthomonadaceae;g__Xylella;s__Xylella taiwanensis

输出:

AF074611.1  o__Enterobacterales;f__Yersiniaceae;g__Yersinia;s__Yersinia pestis
AE003849.1  o__Xanthomonadales;f__Xanthomonadaceae;g__Xylella;s__Xylella fastidiosa

我怎么能做到这一点?谢谢。

标签: awk

解决方案


awk 'FNR==NR{a[$2]=$1;next} $5 in a {print a[$5],$0}' FS='\t' file1 FS='__' file2

在此脚本中,file1首先读取它的字段,并将其字段记录在一个数组中a。然后使用不同的字段分隔符处理第二个文件。


推荐阅读