比较awk中的2个文件并附加通过/失败

比较awk中的2个文件并附加通过/失败,awk,comparison,Awk,Comparison,谢谢大家的反馈。抱歉,因为我不熟悉编码,也不熟悉SO。下面是我目前正在运行的代码 awk 'FNR==NR{a[$4,$5]=$0}{if(b=a[$4,$5]); print b, "PASS";next}else{if(b!=a[$4,$5]){print a, b, "FAIL";next}}' 如果每一行相同,则在其旁边追加一个过程,但如果该行中存在任何不一致,则打印失败 试着让自己更熟悉awk。使用FNR==NR,我能够比较2个文件(逐行),然后在文件末尾打印PASS。但是,我实际上

谢谢大家的反馈。抱歉,因为我不熟悉编码,也不熟悉SO。下面是我目前正在运行的代码

awk 'FNR==NR{a[$4,$5]=$0}{if(b=a[$4,$5]); print b, "PASS";next}else{if(b!=a[$4,$5]){print a, b, "FAIL";next}}'
如果每一行相同,则在其旁边追加一个过程,但如果该行中存在任何不一致,则打印失败


试着让自己更熟悉awk。使用FNR==NR,我能够比较2个文件(逐行),然后在文件末尾打印PASS。但是,我实际上无法让它正确地使场景失败,如果它们不匹配,则打印失败。有人能帮你摆脱困境吗?

以下是一些
awk
脚本,让你开始

$ awk 'NR==FNR{a[NR]=$0;next} 
              {f=$0!=a[FNR]; delete a[FNR]} 
             f{c=FNR;exit} 
           END{c=c?c:(FNR+1);print f||(c in a)?"FAIL on line "c:"PASS"}'

额外的复杂性是由于文件可能具有不同的长度。还要注意的是,现有的工具(diff、comm等)可以以非常紧凑的方式完成这项工作。

作为SO中的一般规则,当您提出此类问题时,最好发布一些代码。编辑问题,以便有人可以尝试帮助您。your问题太宽泛,可以关闭。还可以编辑您的问题,以包含一些简明、可测试的示例输入和预期输出。我们使用
{}
编辑器按钮来格式化它,并正确地尝试代码。熟悉awk的最好方法是阅读Arnold Robbins的《有效的awk编程》,第四版。听起来你的通行逻辑实际上被打破了。谢谢你的评论。这和我要找的有点不同,我编辑了我的问题来告诉你我要做什么。你知道如果(b=a[$4,$5]),会发生什么吗在您的代码中是什么意思?它只是给
b
赋值。如果你缩进你的代码(像我的一样)并注意
和赋值与相等性检查我想你可以自己发现问题。不看缩进,只看一个缩进line@AndyBlair有多行代码是不需要花费的,格式化是一种帮助您处理复杂性的工具。一旦你有了一个解决方案,压缩它就更容易了。