如何比较两个文件中的字符串

如何比较两个文件中的字符串

我有两个文本文件,一个文件包含诸如

Id         Value
1         apple   
2         orange  
3         mango 
4         banana 
5         strawberry
6         papaya

在其他文件中我有类似的条目

Id        Value
6         strawberry 
4         banana
3         orange  
1         mango
2         papaya
5         straw berry

我必须在 Id 和值列中的相应字符串之间进行匹配,并找到字符串的正确性。如何才能做到这一点?

答案1

如果每个文件中始终具有相同数量的条目,并且每个 ID 可以与另一个文件中的相同 ID 连接,那么您可以执行以下操作(这是概念证明,您必须改进它):

$ join -j1 <(sort -n file1.txt) <(sort -n file2.txt) | 
    awk '{if($2!=$3){k="==> BUG"}else {k=" ==> OK"}print $0,k}'

Id Value Value ==> OK
1 apple  mango ==> BUG
2 orange  papaya ==> BUG
3 mango  orange  ==> BUG
4 banana  banana ==> OK
5 strawberry straw berry ==> BUG
6 papaya strawberry  ==> BUG

请注意,例如,如果第二个文件中不存在 ID #4,则它不会“按原样”工作。

您应该删除标题并仅保留BUG行。

$ join -j1 <(sort -n file1.txt | tail -n+2) <(sort -n file2.txt | tail -n+2) | 
    awk '($2!=$3){print $0," ==> BUG"}'

答案2

一个简单的awk解决方案(无需预排序或任何外部工具)可能是:

awk '
  FNR==1 { next }
  NR==FNR { a[$1] = $2 ; next }
  a[$1] != $2 { print $1, ":", $2, "does not match", a[$1] }
' file1 file2

数据的输出:

6 : strawberry does not match papaya
3 : orange does not match mango
1 : mango does not match apple
2 : papaya does not match orange
5 : straw does not match strawberry

相关内容