匹配两个文件的列的值并加入新文件中的所有匹配行

时间:2017-08-02 16:27:26

标签: bash shell awk compare

我有两个文件,第一个看起来像这样:

dif-1-2-3-4.com.log 1 1 1
dif-1-2-3-5.com.log 1 1 2
dif-1-2-3-5.com.log 2 1 1
dif-1-2-3-6.com.log 1 1 3
dif-1-2-3-6.com.log 3 1 1
dif-1-2-4-5.com.log 1 2 1
dif-1-2-4-6.com.log 1 2 2
dif-1-2-4-6.com.log 2 2 1
dif-1-2-5-6.com.log 1 3 1
dif-1-3-4-6.com.log 2 1 2

第二个文件看起来像这样:

dif-1-2-3-4.com 1 1 1
dif-2-3-4-5.com 1 1 1
dif-3-4-5-6.com 1 1 1
dif-1-2-3-5.com 1 1 2
dif-2-3-4-6.com 1 1 2
dif-1-2-3-6.com 1 1 3
dif-1-2-4-5.com 1 2 1
dif-2-3-5-6.com 1 2 1
dif-1-2-4-6.com 1 2 2
dif-1-2-5-6.com 1 3 1
dif-1-3-4-5.com 2 1 1
dif-2-4-5-6.com 2 1 1
dif-1-3-4-6.com 2 1 2
dif-1-3-5-6.com 2 2 1
dif-1-4-5-6.com 3 1 1

我想要这个:

dif-1-2-3-4.com 1 1 1 dif-1-2-3-4.com.log
dif-2-3-4-5.com 1 1 1 dif-1-2-3-4.com.log
dif-3-4-5-6.com 1 1 1 dif-1-2-3-4.com.log
dif-1-2-3-5.com 1 1 2 dif-1-2-3-5.com.log
dif-2-3-4-6.com 1 1 2 dif-1-2-3-5.com.log
dif-1-2-3-6.com 1 1 3 dif-1-2-3-6.com.log
dif-1-2-4-5.com 1 2 1 dif-1-2-4-5.com.log
dif-2-3-5-6.com 1 2 1 dif-1-2-4-5.com.log
dif-1-2-4-6.com 1 2 2 dif-1-2-4-6.com.log
dif-1-2-5-6.com 1 3 1 dif-1-2-5-6.com.log
dif-1-3-4-5.com 2 1 1 dif-1-2-3-5.com.log
dif-2-4-5-6.com 2 1 1 dif-1-2-3-5.com.log
dif-1-3-4-6.com 2 1 2 dif-1-3-4-6.com.log
dif-1-3-5-6.com 2 2 1 dif-1-2-4-6.com.log
dif-1-4-5-6.com 3 1 1 dif-1-2-3-6.com.log

如果第二个文件中第二个第三和第四列的值与第一个文件中的值匹配,那么我希望第二个文件中匹配行后面的第一个文件的打印行。谢谢你的回答。

1 个答案:

答案 0 :(得分:2)

您可以使用$2,$3,$4制作复合键,并按照以下方式制作:

awk 'NR==FNR{a[$2,$3,$4]=$1; next} {print $0, a[$2,$3,$4]}' file1 file2

dif-1-2-3-4.com 1 1 1 dif-1-2-3-4.com.log
dif-2-3-4-5.com 1 1 1 dif-1-2-3-4.com.log
dif-3-4-5-6.com 1 1 1 dif-1-2-3-4.com.log
dif-1-2-3-5.com 1 1 2 dif-1-2-3-5.com.log
dif-2-3-4-6.com 1 1 2 dif-1-2-3-5.com.log
dif-1-2-3-6.com 1 1 3 dif-1-2-3-6.com.log
dif-1-2-4-5.com 1 2 1 dif-1-2-4-5.com.log
dif-2-3-5-6.com 1 2 1 dif-1-2-4-5.com.log
dif-1-2-4-6.com 1 2 2 dif-1-2-4-6.com.log
dif-1-2-5-6.com 1 3 1 dif-1-2-5-6.com.log
dif-1-3-4-5.com 2 1 1 dif-1-2-3-5.com.log
dif-2-4-5-6.com 2 1 1 dif-1-2-3-5.com.log
dif-1-3-4-6.com 2 1 2 dif-1-3-4-6.com.log
dif-1-3-5-6.com 2 2 1 dif-1-2-4-6.com.log
dif-1-4-5-6.com 3 1 1 dif-1-2-3-6.com.log