连接两个文件,保留第一个文件的键顺序并用字符串“null”填充缺失值

连接两个文件,保留第一个文件的键顺序并用字符串“null”填充缺失值

我有两个文件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

相关内容