当 ID 与文件 2 匹配时从文件 1 复制一列并根据文件 2 打印输出

copy a column from file1 when the ID's matches to file2 and print output according to file 2

我有 2 个文件,

头文件1

ESC_KB2908AA_AS  1  Eco-19-00825
ESC_KB2909AA_AS  2  Eco-20-00081
ESC_KB2910AA_AS  3  Eco-20-00128
ESC_KB2911AA_AS  4  Eco-19-00991

和头文件2

ESC_KB2908AA_AS
ESC_KB2908AA_AS
ESC_KB2908AA_AS

ESC_KB2909AA_AS
ESC_KB2909AA_AS
ESC_KB2909AA_AS

ESC_KB2910AA_AS
ESC_KB2910AA_AS

ESC_KB2911AA_AS
ESC_KB2911AA_AS

我想检查 file1 的第一列是否与 file2 的第一列匹配,如果 ID 匹配则根据 file2 打印输出。

预期文件输出:

ESC_KB2908AA_AS   1  Eco-19-00825
ESC_KB2908AA_AS   1  Eco-19-00825
ESC_KB2908AA_AS   1  Eco-19-00825

ESC_KB2909AA_AS  2  Eco-20-00081
ESC_KB2909AA_AS  2  Eco-20-00081
ESC_KB2909AA_AS  2  Eco-20-00081

ESC_KB2910AA_AS  3  Eco-20-00128
ESC_KB2910AA_AS  3  Eco-20-00128

ESC_KB2911AA_AS  4  Eco-19-00991
ESC_KB2911AA_AS  4  Eco-19-00991

我尝试了以下代码,但我只得到 file2 的最后一行的输出。你能帮忙看看脚本有什么问题吗?

awk 'FNR==NR{key[]=;next} {=key[]}1' file1.txt file2.txt > output.txt

这个 awk 应该适合你:

awk 'FNR==NR{key[] = [=10=]; next} !NF ||  in key {print key[]}' file1 file2
ESC_KB2908AA_AS  1  Eco-19-00825
ESC_KB2908AA_AS  1  Eco-19-00825
ESC_KB2908AA_AS  1  Eco-19-00825

ESC_KB2909AA_AS  2  Eco-20-00081
ESC_KB2909AA_AS  2  Eco-20-00081
ESC_KB2909AA_AS  2  Eco-20-00081

ESC_KB2910AA_AS  3  Eco-20-00128
ESC_KB2910AA_AS  3  Eco-20-00128

ESC_KB2911AA_AS  4  Eco-19-00991
ESC_KB2911AA_AS  4  Eco-19-00991

条件 !NF || in key 如果它是空行将打印,否则 </code> 存在于 <code>key 数组中,该数组存储文件 1 中的整行,键为 来自同一个文件。