我有两个文本文件,一个文件包含诸如
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