cat file1:
a
b
c
d
e
cat file2:
a 10
c 20
e 30
f 40
所需的输出文件是:
a 10
b
c 20
d
e 30
f 40
我尝试过使用awk,但最后我重复了所有的file1行。 非常感谢
答案 0 :(得分:3)
读入这两个文件并将它们哈希到一个数组(a
)。如果您在file1
之前阅读file2
,那么碰撞将对您有利。在awk:
$ awk '{a[$1]=$0} END{for(i in a) print a[i]}' file1 file2
a 10
b
c 20
d
e 30
f 40
说明:
{
a[$1]=$0 # hash all records to a
}
END { # after processing both files
for(i in a) # iterate thru every key in a
print a[i] # and output their values
}
由于for(i in a)
的性质,输出顺序是随机的。
答案 1 :(得分:2)
另一种awk
而且不太聪明的方法
$ awk 'NR==FNR {a[$1]=$2; next}
$1 in a {$2=a[$1]; delete a[$1]}
1;
END {for(k in a) print k,a[k]}' file2 file1
a 10
b
c 20
d
e 30
f 40
答案 2 :(得分:0)
不确定awk
是否是OP的硬性要求,但这里是使用join
的替代解决方案,这似乎更适合手头的工作(正如@shellter所指出的那样) :
$ join -a1 -a2 file1 file2