我设法将两个不同长度的文件与公共列(中间)合并,但输出不是所需的。
如果您可以查看我使用的代码,那将非常棒。
档案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 :(得分:0)
您可以使用join
:http://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