比较两个文件并附加值,在输出文件中保留不匹配的内容

Compare two files and append the values, leave the mismatches as such in the output file

我正在尝试匹配两个文件,file1.txt(50,000 行),file2.txt(55,000 行)。我想 campare file2 to file 1 提取第 2 列和第 3 列的值,并保留不匹配项。输出文件必须包含 file2 中的所有 ID,即它应该有 55000 行。注意:文件 1 中的所有 ID 都不存在于文件 2 中。即实际匹配可能少于 50,000。

file1.txt

ab1 12 345  
ab2 9 456  
gh67 6 987  

file2.txt

ab2 0 0  
ab1 0 345  
nh7 0 0  
gh67 6 987  

输出

ab2 9 456  
ab1 12 345  
nh7 0 0  
gh67 6 987 

这是我尝试过的,但它只打印匹配项(所以我的输出文件中有 49,000 行,而不是 55,000 行)

awk "NR==FNR {f[]=[=13=];next} in f{print f[],[=13=]}" file1.txt file2.txt >output.txt

这个 awk 脚本可以工作

NR == FNR {
    a[] = [=10=]
    next
}
 in a {
    split(a[], b)
    print , (b[2] ==  ?  : b[2]), (b[3] ==  ?  : b[3])
}
!( in a)

如果将其另存为 a.awk 和 运行

awk -f a.awk foo.txt foo1.txt

这将输出

ab2 9 456
ab1 12 345
nh7 0 0
gh67 6 987