【问题标题】:Merge two files by one column - awk按一列合并两个文件 - awk
【发布时间】:2018-08-28 11:53:24
【问题描述】:

我有两个不同的脚本来按一个匹配的列合并文件。

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 的第 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

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

感谢您的帮助。

【问题讨论】:

标签: join awk merge


【解决方案1】:

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

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

一些笔记

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

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多