Join 通过一列合并两个文件-awk

Join 通过一列合并两个文件-awk,join,awk,merge,Join,Awk,Merge,我有两个不同的脚本通过一个匹配列合并文件 file1.tsv-由制表符分隔的4列 1 LAK c.66H>T p.Ros49Kos 2 OLD c.11A+1>R p.Ill1639Los 3 SRP c.96V-T>X p.Zub%D23 4 HRP c.1S>T p.Lou33aa file2.tsv-14列,由制表符分隔 LAK "empty_column" c.66H>T ...... SRP "empty_column" c.96-T

我有两个不同的脚本通过一个匹配列合并文件

file1.tsv-由制表符分隔的4列

1 LAK c.66H>T    p.Ros49Kos
2 OLD c.11A+1>R  p.Ill1639Los
3 SRP c.96V-T>X  p.Zub%D23
4 HRP c.1S>T     p.Lou33aa
file2.tsv-14列,由制表符分隔

LAK "empty_column" c.66H>T  ......
SRP "empty_column" c.96-T>X ......
Ouptut.tsv-文件2.tsv中的所有列以及文件1第一列后面的所有列(如果匹配)

LAK "empty_column" c.66H>T  ......1
SRP "empty_column" c.96-T>X ......3
我正在使用这两个脚本,但不起作用:

awk -v FILE_A="file1.tsv" -v OFS="\t" 'BEGIN { while ( ( getline <
FILE_A ) > 0 ) { VAL = $0 ; sub( /^[^ ]+ /, "", VAL ) ; DICT[ $3 ] =
VAL } } { print $0, DICT[ $3 ] }' file2.tsv
感谢您的帮助。

您可能希望使用该命令将第一个文件的第2列与第二个文件的第1列连接起来:

join --nocheck-order -1 2 -2 1 file1.tsv file2.tsv
一些注释

这是第一步,在这之后,您仍然需要删除不需要的列,或者重新排列它们。我建议查看cut命令,或者这次使用awk。 join命令要求两个文件上的文本按字母顺序或其他顺序排列 或者,将它们导入临时sqlite3数据库并在那里执行联接。
@Vonton,请发布更多正确的输入样本,然后让我们知道。
join --nocheck-order -1 2 -2 1 file1.tsv file2.tsv