如何使用 awk NR==FNR 比较和打印结果
How to compare and print result using awk NR==FNR
我有 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) 的行,如果找到匹配或
如果不匹配
,则用“failed”打印第一个文件 (age2.txt) 的行
预期输出
a=30 passed
b=23 failed
c=33 passed
d=43 failed
e=75 passed
当我用 awk 尝试时,我发现 "failed" 行在两种情况下都重复(注意 b=23 和 d=43,它会重复..)
awk -F= 'NR==FNR{a[NR]=;next}a[FNR]!= {print $line " Failed" ;} a[FNR]= {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
有人可以帮助避免重复 "failed" 行吗?
提前谢谢你:)
你只需要在 Failed
中添加一个 next
:
awk -F= 'NR==FNR{a[NR]=;next}a[FNR]!= {print $line " Failed" ;next} a[FNR]= {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
你的 awk 可以简化为:
awk 'FNR==NR{a[]; next} {print , ( 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[]; next} {print [=11=], ( in a) ? "passed":"failed"}' age3.txt age2.txt
一个可能更简单的解决方案是将两个文件合并 paste
:
paste age2.txt age3.txt | awk -F'\t' '{print , ==?"passed":"failed"}'
我有 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) 的行,如果找到匹配或
如果不匹配
预期输出
a=30 passed
b=23 failed
c=33 passed
d=43 failed
e=75 passed
当我用 awk 尝试时,我发现 "failed" 行在两种情况下都重复(注意 b=23 和 d=43,它会重复..)
awk -F= 'NR==FNR{a[NR]=;next}a[FNR]!= {print $line " Failed" ;} a[FNR]= {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
有人可以帮助避免重复 "failed" 行吗?
提前谢谢你:)
你只需要在 Failed
中添加一个 next
:
awk -F= 'NR==FNR{a[NR]=;next}a[FNR]!= {print $line " Failed" ;next} a[FNR]= {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
你的 awk 可以简化为:
awk 'FNR==NR{a[]; next} {print , ( 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[]; next} {print [=11=], ( in a) ? "passed":"failed"}' age3.txt age2.txt
一个可能更简单的解决方案是将两个文件合并 paste
:
paste age2.txt age3.txt | awk -F'\t' '{print , ==?"passed":"failed"}'