我试图合并多个 TSV表,但我很难获得我需要的输出。
假设我们有 file1 :
K1 V1
K2 V2
K3 V3
K4 V4
file2的:
K1 X1 Y1
K2 X2 Y2
K4 X4 Y4
file3 :( UX是我们不希望包含在最终合并中的专栏)
K1 UX A1
K2 UX A2
K3 UX A3
K4 UX A4
现在假设我要在其键上合并 file1 , file2 和 file3 并选择某些列。
所以我想要一个特定的输出:
K1 V1 X1 Y1 A1
K2 V2 X2 Y2 A2
K4 V4 X4 Y4 A4
目前我正在尝试使用join -t$'\t' <(sort -t$'\t' -k1,1 file1)
等等......但我遇到了困难,因为我试图在各种不同的表格中选择某些列。
有没有人知道这方面的解决方案?
谢谢!
编辑:所以目前我合并了这样的表:join -t$'\t' <(sort -t$'\t' -k1,1 file1) \
<(sort -t$'\t' -k1,1 file2) \
<(sort -t$'\t' -k1,1 file3) > join1.txt
...但显然这不允许我选择列。我尝试使用 awk 循环尝试执行此操作,但它似乎比应该更复杂。
答案 0 :(得分:1)
我不确定您join
的尝试是否有效,因为join
一次只接受两个文件。
您始终可以告诉join
要报告哪些列。以下内容适用于您的数据:
join -t$'\t' -o1.1,1.2,1.3,1.4,2.3 \
<(join -t$'\t' \
<(sort -t$'\t' -k1,1 file1) \
<(sort -t$'\t' -k1,1 file2) ) \
<(sort -t$'\t' -k1,1 file3)
输出:
K1 V1 X1 Y1 A1
K2 V2 X2 Y2 A2
K4 V4 X4 Y4 A4