我正在尝试合并一个公共键上的两个 TSV 列。假设文件 A 是:
a 100
b 200
c 300
文件B是:
a "hello"
c "my name is"
我希望输出文件看起来像:
a 100 "Hello"
c 300 "my name is"
到目前为止,我已经创建了一个如下所示的文件:
a 100 "Hello"
b 200 ""
c 300 "my name is"
我想删除多余的不需要的行,因为它没有所有字段。
这是我到目前为止的代码
awk '
NR==1{print "column_A","column_B","column_C"}
FNR==NR{
A[$1]=$2
next
}
{
print $0,( f=$1 in A ? A[$1] : "" )
if(f) delete A[$1]
}
END{
for(i in A)
print i,"",A[i]
}
' OFS='t' file2 file1
有什么方法可以对此代码进行轻微修改以获得该输出?
谢谢!
使用 join
命令:
join -t$'t' file1 file2
请注意,这要求在连接字段上对输入文件进行排序。如果不是,则可以使用进程替换。
join -t$'t' <(sort -t$'t' -k1,1 file1) <(sort -t$'t' -k1,1 file2)