比较两个文件并打印Available和NotFound -Continuation:

时间:2014-05-29 17:52:17

标签: awk

想比较F11.txt中的第二个字段和F22.txt中的第一个字段 然后将匹配案例打印为“可用”,将非匹配案例打印为“NotFound” 如果字段$ 4(文件F11.txt)为空,如果字段$ 4(文件F11.txt)不为null,则按原样打印F11.txt行。

Inputs:

F11.txt
a,10,zzz
b,20,zzz,yyy
c,50,zzz

F22.txt
10,yyy
20,yyy
30,yyy
40,yyy

尝试了下面的命令,谢谢你的帮忙。

awk -F "," 'NR==FNR{a[$1]=$0;next}{print $0 "," (a[$2]?"Available":"NotFound")  }' f22.txt f11.txt

得到以下输出

a,10,zzz,Available
b,20,zzz,yyy,Available
c,50,zzz,NotFound

其中b,20,zzz,yyy是匹配大小写,但不想覆盖为“可用”,因为$ 4不为空(空)

预期产出:

a,10,zzz,Avilable
b,20,zzz,yyy
c,50,zzz,NotFound

2 个答案:

答案 0 :(得分:1)

我相信下面的脚本可以满足您的需求

BEGIN {
    FS=OFS=","
}

NR==FNR {
    a[$1]=$0
    next
}

!$4 {
    $4 = (a[$2] ? "Available" : "NotFound")
}

1

更新了脚本以明确检查空的第四个字段(以允许具有空第四个字段的更长行)。 再次更新以替换空的第四个字段,而不是附加字段。

答案 1 :(得分:0)

试试这个:

awk -F, '
NR==FNR {a[$1]=$0;next}
  NF==3 {print $0($2 in a?",Available":",NotFound");next}1
' F22.txt F11.txt
a,10,zzz,Available
b,20,zzz,yyy
c,50,zzz,NotFound