如果index不在awk数组中,则打印默认值

时间:2016-01-06 11:09:23

标签: awk associative-array

$ cat file1 #It contains ID:Name   
5:John  
4:Michel

$ cat file2 #It contains ID  
5  
4  
3  

我想用file1中的Names替换file2中的ID,需要输出

John  
Michel  
NO MATCH FOUND  

我需要扩展以下代码以重新编写NO MATCH FOUND文本。

awk -F":" 'NR==FNR {a[$1]=$2;next} {print a[$1]}' file1 file2 

我目前的结果:

John  
Michel  
        << empty line

谢谢,

3 个答案:

答案 0 :(得分:4)

您可以使用三元运算符:print ($1 in a)?a[$1]:"NO MATCH FOUND"。也就是说,如果$1在数组中,则将其打印出来;否则,打印文本&#34;找不到匹配&#34;。

所有在一起:

$ awk -F":" 'NR==FNR {a[$1]=$2;next} {print ($1 in a)?a[$1]:"NO MATCH FOUND"}' f1 f2
John
Michel
NO MATCH FOUND

答案 1 :(得分:2)

您可以测试索引是否出现在数组中:

$ awk -F":" 'NR==FNR {a[$1]=$2;next} $1 in a {print a[$1]; next} {print "NOT FOUND"}' file1 file2
John
Michel
NOT FOUND

答案 2 :(得分:0)

if file2 has only digit (no space at the end)

awk -F ':' '$1 in A {print A[$1];next}{if($2~/^$/) print "NOT FOUND";else A[$1]=$2}' file1

if not

awk -F '[:[:blank:]]' '$1 in A {print A[$1];next}{if($2~/^$/) print "NOT FOUND";else A[$1]=$2}' file1 file2