首页 > 解决方案 > awk 比较 2 个未排序文件中的 2 列,并在匹配后返回第 2 个文件中的特定列

问题描述

我希望将 file1 中的 col1 和 col3 与 file2 中的 col1 和 col2 进行比较。如果匹配,我想打印 file1 的 col1 和 col3 以及 file2 的 col5 和 col6。文件 1 没有标题,但文件 2 有标题。我还想根据 file1 中的顺序保留顺序

例子:

file1:   
1 3 6 
1 3 7
3 3 5
2 4 9
0 5 3

file2:
A B C D E F G
2 9 D 0 5 X 9
1 7 A 8 6 6 G
1 6 D 5 5 T 1
3 5 M 2 2 R 9
7 9 X 3 1 1 4

Expected result:
    1 6 5 T
    1 7 6 6
    3 5 2 R
    2 9 5 X

我试过这个:

awk -F ' ' 'FNR=NR{arr[$1$3]++;next};arr[$1$2]{print $5,$6,arr[$1,$3];}' file1 file2

它只打印 file2 的 col5 和 col6。我怎样才能得到结果。我想要它在 awk 但任何其他语言仍然可以

标签: pythonawksed

解决方案


你可以使用这个awk

awk 'FNR == NR {map[$1,$2] = $5 OFS $6; next}
($1,$3) in map {print $1, $3, map[$1,$3]}' file2 file1

1 6 5 T
1 7 6 6
3 5 2 R
2 9 5 X

推荐阅读