比较两个文件的两列,如果匹配不在unix中,则显示第三列的输入

时间:2017-08-16 01:46:29

标签: shell unix

我想比较两个文件file1.txt和file2.txt的前两列,如果它们匹配,则写入另一个文件output.txt,其中包含file1,file 2的第三列以及匹配的详细信息(如果匹配)或不。

FILE1.TXT

ab|2001|name1
cd|2000|name2
ef|2002|name3
gh|2003|name4

FILE2.TXT

xy|2001|name5
cd|2000|name6
ef|2002|name7
gh|2003|name8

output.txt的

name1 name5  does not match
name2 name6  matches
name3 name7  matches
name4 name8  matches

2 个答案:

答案 0 :(得分:0)

你可以使用paste和awk来获得你想要的东西。

以下解决方案假设file1和file2中的字段将始终由" |"

分隔
paste -d "|" file1.txt file2.txt | awk -F "|" '{ if( $1 == $4 && $2 == $5 ){print $3, $6, "matches"} else {print $3, $6, "does not match"} }' > output.txt

答案 1 :(得分:0)

欢迎来到堆栈溢出,请您试试,请告诉我这是否对您有帮助。

awk -F"|" 'FNR==NR{a[$2]=$1;b[$2]=$3;next} ($2 in a) && ($1==a[$2]){print b[$2],$3,"matched properly.";next} {print b[$2],$3,"Does NOT matched."}' file1.txt file2.txt

编辑:此处也添加非单线形式的解决方案。

awk -F"|" '
FNR==NR{
   a[$2]=$1;
   b[$2]=$3;
   next
}
($2 in a) && ($1==a[$2]){
   print b[$2],$3,"matched properly.";
   next
}
{
   print b[$2],$3,"Does NOT matched."
}
' file1.txt file2.txt