Awk 如何比较两个文件中的列并打印第一个文件的第一列和第二个文件的第二列以及缺少的值NA?

Awk 如何比较两个文件中的列并打印第一个文件的第一列和第二个文件的第二列以及缺少的值NA?,awk,Awk,我有两个文件,并试图比较两个文件和打印特定的值,但在某个地方我遗漏了一些东西。试着纠正我的错误 文件1 Saureus08BA02176_01020 NA Saureus08BA02176_02495 COG1510 K Saureus08BA02176_02020 COG1854 T Saureus08BA02176_01302 COG3763 S Saureus08BA02176_01834 COG0744 M Saureus08BA02176_01131 NA Saureus

我有两个文件,并试图比较两个文件和打印特定的值,但在某个地方我遗漏了一些东西。试着纠正我的错误

文件1

Saureus08BA02176_01020 NA
Saureus08BA02176_02495 COG1510 K    
Saureus08BA02176_02020 COG1854 T 
Saureus08BA02176_01302 COG3763 S 
Saureus08BA02176_01834 COG0744 M 
Saureus08BA02176_01131 NA
Saureus08BA02176_02481 COG0579 R 
文件2

Saureus08BA02176_01381 1.00000
Saureus08BA02176_00001 1.00000
Saureus08BA02176_01020 324.08332
Saureus08BA02176_01131 999.00000
Saureus08BA02176_02481 4.07781
所需输出

Saureus08BA02176_01020 NA 324.08332
Saureus08BA02176_02495 COG1510 K NA   
Saureus08BA02176_02020 COG1854 T NA
Saureus08BA02176_01302 COG3763 S NA
Saureus08BA02176_01834 COG0744 M NA
Saureus08BA02176_01131 NA 999.000
Saureus08BA02176_02481 COG0579 R 4.07781
命令:

awk 'FNR==NR{a[$1]=$2;next}{print $0,a[$1]?a[$2]:"NA"}' file2 file1 > test1
它没有打印文件2的$2值..我哪里出错了

a[$1]?a[$2]:"NA"
         ^
       your array has no element, with index being second field of file1
你有
a[$1]?a[$2]:“NA”
至少如果有
a[$1]?a[$1]:“NA”
,本可以工作,但最好使用
(数组中的索引键)
,这样它就变成了
(a[$1]:“NA”)


如果记录的顺序不重要,可以简单地使用连接方法:

join -a1 -e "NA" <(sort file1) <(sort file2)

请学习使用编辑框顶部的编辑工具栏,特别是
{}
工具将文本格式化为代码/数据/文本。您能解释一下吗?
join -a1 -e "NA" <(sort file1) <(sort file2)
Saureus08BA02176_01020 NA 324.08332
Saureus08BA02176_01131 NA 999.00000
Saureus08BA02176_01302 COG3763 S NA
Saureus08BA02176_01834 COG0744 M NA
Saureus08BA02176_02020 COG1854 T NA
Saureus08BA02176_02481 COG0579 R 4.07781
Saureus08BA02176_02495 COG1510 K NA