通过一列合并两个文件-AWK

时间:2018-08-28 11:53:25

标签: 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>X ......

Ouptut.tsv-file2.tsv中的所有列,如果匹配则在file1的第一列之后。

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

awk 'NR==FNR{h[$3] = $1; next} {print h[$3]}' file1.tsv file2.tsv

感谢帮助。

1 个答案:

答案 0 :(得分:1)

您可能想使用join命令将第一个文件的第2列与第二个文件的第1列相连:

join --nocheck-order -1 2 -2 1 file1.tsv file2.tsv

一些笔记

  • 这是第一步,在此之后,您仍然需要切除或重新排列不需要的列。我建议查看cut命令,或这次使用awk
  • join命令期望两个文件上的文本顺序相同(字母或字母顺序)
  • 或者,将它们导入一个临时的sqlite3数据库中并在其中执行联接。