当 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 中的整行,键为
来自同一个文件。
我有 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 中的整行,键为 来自同一个文件。