2014-11-21 32 views
1

我設法合併兩個不同長度的文件與公共列(中),但輸出不是所需的。使用公共列輸出不同長度的合併文件 - 打印附加列

如果您可以檢查我使用的代碼,IT將會非常棒。

文件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 

回答

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 
0
> a[$1]=$0 

這捕獲整個輸入線,包括在mid列。如果你不想那樣做,不要這樣做。

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