合并键列和不同类型列上的多个表

时间:2016-06-02 23:29:56

标签: bash shell

我试图合并多个 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 循环尝试执行此操作,但它似乎比应该更复杂。

1 个答案:

答案 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