【问题标题】:Compe 2 Awk Files Print Match / No MatchCompe 2 Awk 文件打印匹配/不匹配
【发布时间】:2016-03-03 02:20:30
【问题描述】:

大部分是 awk 和编程新手。尝试比较一个项目的几个文件并附加 MATCH 或 NO MATCH。

我当前的 awk 代码改编自我正在研究的另一个问题 awk Compare 2 files print match and differences

我的代码是:

awk 'NR==FNR{a[$0];next}{if (a[$0]=$0)print a[$0], "MATCh";else print a[$0], "NO MATCH";}' file1.txt file2.txt >> file3.txt

通过调整它,我可以添加所有“匹配”或添加所有“不匹配”。任何帮助将不胜感激,并很想了解我做错了什么。谢谢!

【问题讨论】:

  • = 不是a[$0]=$0 中的相等检查,您已经在NR==FNR 中使用了正确的形式

标签: awk


【解决方案1】:

这是您的脚本似乎尝试执行的正确语法:

awk 'NR==FNR{a[$0];next} {print $0, ($0 in a ? "" : "NO ") "MATCH"}' file1.txt file2.txt

【讨论】:

  • 感谢您的评论。这似乎让我走得更远,但是当它遇到一条无与伦比的线时,它似乎对其他人来说是无与伦比的。你介意解释 a 中的 $0 吗?部分?其余的我认为对我来说是有意义的。感谢您的帮助。
  • 这只是一个三元表达式 (en.wikipedia.org/wiki/%3F:) 检查当前文件 (file2.txt) 中的当前行是否存在于前一个文件 (file1.txt) 中。如果它确实存在,则在 MATCH 之前不会打印任何额外内容,否则在 MATCH 之前打印 NO。在第一次出现不匹配行后,该脚本不会将所有行都指示为不匹配。调试 - 添加打印和/或将您的样本输入减少到可以重现问题的最小可能集合。如果您无法从中弄清楚,请发布带有该示例输入/输出的问题以获得帮助。
  • 谢谢!您的评论帮助我解决了这个问题。