我需要帮助来交叉引用两个文件。
文件1
Aplastodiscus_albofrenatus_CFBH5051
Aplastodiscus_albosignatus_MZUSPfield1451
Aplastodiscus_arildae_USNM303022
Aplastodiscus_cavicola_MNRJ63689
Aplastodiscus_cochranae_CFBH3001
文件2
>12sval16s_Aplastodiscus_albofrenatus_CFBH5051
>12sval16s_Aplastodiscus_albosignatus_MZUSPfield1451
>12sval16s_Aplastodiscus_arildae_USNM303022
>12sval16s_Boana_palaestes_MUBI6795
>12sval16s_Boana_gladiator_MUBI5391
仅当 file1 中的字符串与 file2 中第一个“_”之后的字符串之间发生匹配时,我才想在 file2 中附加不带“">”的字符串。 file1 和 file2 中的字符串必须使用空格分隔。输出应该是这样的:
Aplastodiscus_albofrenatus_CFBH5051 12sval16s_Aplastodiscus_albofrenatus_CFBH5051
Aplastodiscus_albosignatus_MZUSPfield1451 12sval16s_Aplastodiscus_albosignatus_MZUSPfield1451
Aplastodiscus_arildae_USNM303022 12sval16s_Aplastodiscus_arildae_USNM303022
Aplastodiscus_cavicola_MNRJ63689
Aplastodiscus_cochranae_CFBH3001
我想知道 awk 是否有帮助。先感谢您。
:)
答案1
您可以使用 GNU sed 来实现此目的,但 awk 解决方案将更具可读性。
sed -rn '/^>/!{G;s:^([^\n]+)\n.*>([^_]+_)\1\.*:\1 \2\1:;P;d};H' FILE2 FILE1 > OUTPUT
输入顺序很重要:FILE1 需要最后读取,因为它是打印的,无论是否与先前存储的 FILE2 匹配。