2016-01-06 147 views
1
$ cat file1 #It contains ID:Name 
5:John 
4:Michel 

$ cat file2 #It contains ID 
5 
4 
3 

我想从文件1名称替换file2中的ID,输出所需打印默认值

John 
Michel 
NO MATCH FOUND 

我需要扩展以下代码reult没有发现匹配文本。

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

我现在的结果是:

John 
Michel 
     << empty line 

感谢,

回答

4

您可以使用一个三元操作此:print ($1 in a)?a[$1]:"NO MATCH FOUND"。也就是说,如果$1在数组中,则将其打印出来;否则,打印文字“不匹配”。

一起:

$ 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

你可以删除'in'检查和使用'print a [$ 1]?a [$ 1]:“NO MATCH FOUND”来代替。 – karakfa

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 
0

如果文件2只有数字(末尾没有空格)

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

如果不是

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