我有两个文件file1
-file2
我想加入,但第二个文件中缺少一些字段,我想为其插入字符串“null”。一项要求是键的顺序必须与 中的顺序相同file1
。
输入文件和预期输出结果如下:
file1.txt file2.txt
a 7 nah a anau
b 0 blah c bau
c 5 bah d cau
d 1 gah
e 0 hah
预期输出结果:
a 7 nah anau
b 0 blah null
c 5 bah bau
d 1 gah cau
e 0 hah null
答案1
join
+sort
解决方案:
join -o1.1,1.2,1.3,2.2 -a1 -e"null" <(sort file1.txt) <(sort file2.txt)
输出:
a 7 nah anau
b 0 blah null
c 5 bah bau
d 1 gah cau
e 0 hah null
答案2
解决方案使用join
:
join file1.txt file2.txt -e null -o auto -a 1 2>/dev/null
从手册页中尚不清楚,但该-e
选项仅适用于-o
.
答案3
我能够用 解决它awk
。我发现在我的数据中,如示例所示,第二个字段file1.txt
必须为 0,否则它会丢失file2.txt
-- 这有帮助。该脚本看起来像这样:
NR==FNR {
a[$1]=$2;next
}
$2!=0{
print $0,a[$1]
}
$2==0{
print $0,"null"
}
调用:
awk -f merge.awk file2.txt file1.txt