一尘不染

Linux按列合并两个文件

linux

我正在尝试合并以下两个文件(交集)

ID     Name  Telephone       
1      John     011
2      Sam      013
3      Jena     014
4      Peter    015

第二个文件Test2.txt

1       Test1    Test2
2       Test3    Test4
3       Test5    Test6
4       Test7    Test8
5       Test7    Test8
6       Test7    Test8
7       Test7    Test8
8       Test7    Test8
9       Test7    Test8

然后最终结果

ID     Name  Telephone    Remark1  Remark2
1      John    011        Test1    Test2
2      Sam     013        Test3    Test4
3      Jena    014        Test5    Test6
4      Peter   015        Test7    Test8

我确实如下所示

awk -F"\t" '
    {key = $1 }
    NR == 1 {header = key}
    !(key in result) {result[key] = $0; next}
    { for (i=2; i <= NF; i++) result[key] = result[key] FS $i }
    END {
        print result[header]
        delete result[header]
        PROCINFO["sorted_in"] = "@ind_str_asc"    
        for (key in result) print result[key]
    }
' Test1.txt Test2.txt > result.txt

我只是注意到这是联盟设置的。包括所有数据Test1和Test2。

我只希望对Intersection案例显示我期望的结果。仅(1,2,3,4)

你们有什么主意吗?谢谢!


阅读 764

收藏
2020-06-07

共1个答案

一尘不染

$ awk -v OFS='\t' '
NR==1   { print $0, "Remark1", "Remark2"; next }
NR==FNR { a[$1]=$0; next }
$1 in a { print a[$1], $2, $3 }
' Test1.txt Test2.txt
ID     Name  Telephone  Remark1 Remark2
1      John     011     Test1   Test2
2      Sam      013     Test3   Test4
3      Jena     014     Test5   Test6
4      Peter    015     Test7   Test8
2020-06-07