如果文件中的列在另一列中包含匹配项,则连接这些列

如果文件中的列在另一列中包含匹配项,则连接这些列

我有两个文件:

文件1.txt

30    40    A    T    match1    string1
45    65    G    R    match2    string2
50    78    C    Y    match3    string3

文件2.txt

match1    60    add1    50    add2
match2    15    add1    60    add2
match3    20    add1    45    add2

我想获得如下所示的输出:

30    40    A    T    match1    string1    60    add1
45    65    G    R    match2    string2    15    add1
50    78    C    Y    match3    string3    20    add1

如果 file1.txt 的第 5 列中有匹配项,我想将 file2.txt 的第 2 列和第 3 列附加到 file1.txt 的末尾。

我尝试使用这个加入命令:

join -1 5 -2 1 -a 1 -o 1.1 -o 1.2 -o 1.3 -o 1.4 -o 1.5 -o 1.6 -o 2.2 -o 2.3 file1.txt fil2.txt

但是,这似乎只打印第一个文件中的列。除了 join 之外还有其他解决方案来解决这个问题吗?

答案1

你可以做:

join -1 5 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 file1.txt file2.txt

例子:

% cat f1.txt 
30    40    A    T    match1    string1
45    65    G    R    match2    string2
50    78    C    Y    match3    string3

% cat f2.txt 
match1    60    add1    50    add2
match2    15    add1    60    add2
match3    20    add1    45    add2

% join -1 5 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 f1.txt f2.txt
30 40 A T match1 string1 60 add1
45 65 G R match2 string2 15 add1
50 78 C Y match3 string3 20 add1

答案2

我找到了一个解决方案:

awk -F "\t" 'FNR==NR {a[$1] = $2 "\t" $3;next} $5 in a{print $0 "\t" a[$5]}' file2.txt file1.txt > outing.txt

相关内容