我有2个文件。 age2.txt& age3.txt
age2.txt
a=30
b=23
c=33
d=43
e=75
age3.txt
a=30
b=26
c=33
d=44
e=75
我需要一个命令:
比较两个文件的第二列和
如果找到匹配或
,则打印第一个文件行(age2.txt)和“已通过”
如果不匹配,则打印第一个文件行(age2.txt)“失败”
预期输出
a=30 passed
b=23 failed
c=33 passed
d=43 failed
e=75 passed
当我用awk尝试时,我看到对于我而言,“失败”行重复了两种情况(b = 23和d = 43的注意事项,重复...)
awk -F= 'NR==FNR{a[NR]=$2;next}a[FNR]!=$2 {print $line " Failed" ;} a[FNR]=$2 {print $line " Passed" ;}' age2.txt age3.txt
a=30 Passed
b=26 Failed
b=26 Passed
c=33 Passed
d=44 Failed
d=44 Passed
e=75 Passed
有人可以帮助避免重复“失败”的线路吗? 提前谢谢你:)
答案 0 :(得分:0)
您只需要在next
中添加Failed
:
awk -F= 'NR==FNR{a[NR]=$2;next}a[FNR]!=$2 {print $line " Failed" ;next} a[FNR]=$2 {print $line " Passed" ;}' age2.txt age3.txt
<强>结果:强>
a=30 Passed
b=26 Failed
c=33 Passed
d=44 Failed
e=75 Passed
如果你想让输出反映第一个文件而不是第二个文件的值,那么翻转输入文件的位置:
age3.txt age2.txt
<强>结果:强>
a=30 Passed
b=23 Failed
c=33 Passed
d=43 Failed
e=75 Passed
答案 1 :(得分:0)
你的awk可以简化为:
awk 'FNR==NR{a[$1]; next} {print $1, ($1 in a) ? "passed":"failed"}' age3.txt age2.txt
a=30 passed
b=23 failed
c=33 passed
d=43 failed
e=75 passed
仅比较第二列使用:
awk -F= 'FNR==NR{a[$2]; next} {print $0, ($2 in a) ? "passed":"failed"}' age3.txt age2.txt
答案 2 :(得分:0)
一个可能更简单的解决方案是将两个文件与paste
组合:
paste age2.txt age3.txt | awk -F'\t' '{print $1, $1==$2?"passed":"failed"}'