使用公共列输出具有不同长度的合并文件 - 打印其他列

时间:2014-11-21 12:31:19

标签: linux

我设法将两个不同长度的文件与公共列(中间)合并,但输出不是所需的。

如果您可以查看我使用的代码,那将非常棒。

档案1

mid A1  A2  A3  A4  A5  A6
18  we  gf  32  23  45  89
19  ew  fg  33  24  46  90
21  ew  fg  35  26  48  92

文件2

mid B1  B2  B3  B4
18  r40 1   103 NA
19  r41 1   104 NA
20  r42 1   105 NA
21  r43 1   106 NA

使用过的代码:

awk 'NR==FNR{a[$1]=$0;next} ($1) in a{print $0, a[$1]}' file1.txt file2.txt

实际输出:

mid     B1      B2      B3      B4 **mid**  A1      A2      A3      A4      A5      A6
18      r40     1       103     NA 18   we      gf      32      23      45      89
19      r41     1       104     NA 19   ew      fg      33      24      46      90
21      r43     1       106     NA 21   ew      fg      35      26      48      92

虽然所需的输出是:没有列 MID

mid     B1      B2      B3      B4    A1      A2      A3      A4      A5      A6
18      r40     1       103     NA    we      gf      32      23      45      89
19      r41     1       104     NA    ew      fg      33      24      46      90
21      r43     1       106     NA    ew      fg      35      26      48      92

2 个答案:

答案 0 :(得分:0)

您可以使用joinhttp://linux.die.net/man/1/join

join -j1 file2 file1

打印

mid B1 B2 B3 B4 A1 A2 A3 A4 A5 A6
18 r40 1 103 NA we gf 32 23 45 89
19 r41 1 104 NA ew fg 33 24 46 90
21 r43 1 106 NA ew fg 35 26 48 92

答案 1 :(得分:0)

> a[$1]=$0

这会捕获整个输入行,包括mid列。如果你不想那样做,不要这样做。

line=$0; sub(/^[^ \t]+[ \t]+/, "", line); a[$1]=line