linux - 在 Linux 中部分合并 2 个文本文件

标签 linux shell ubuntu awk grep

我有 2 个文本文件,我想将它们合并到一个新文件中。

我的第一个文件是这样的

DjScaffold1002  blastx  protein_match   50305   51044   125 -   .   ID=DjScaffold1002:hit:2832:3.10.0.0;Name=sp|Q9UEW3|MARCO_HUMAN
DjScaffold1002  blastx  protein_match   50305   50892   208 -   .   ID=DjScaffold1002:hit:2833:3.10.0.0;Name=sp|Q60754|MARCO_MOUSE
DjScaffold1002  blastx  protein_match   44584   45176   145 -   .   ID=DjScaffold1002:hit:2834:3.10.0.0;Name=sp|Q7SIB2|CO4A1_BOVIN

和第二个文件=

Q9UEW3  MARCO
Q60754  Marco
Q7SIB2  COL4A1

我的预期输出是,我的意思是将第 9 列字符串的一部分从第一行映射到第二个文件的第 1 列,应该是这样的:

DjScaffold1002  blastx  protein_match   50305   51044   125 -   .   ID=DjScaffold1002:hit:2832:3.10.0.0;Name=sp|Q9UEW3|MARCO_HUMAN;Symbol=MARCO
DjScaffold1002  blastx  protein_match   50305   50892   208 -   .   ID=DjScaffold1002:hit:2833:3.10.0.0;Name=sp|Q60754|MARCO_MOUSE;Symbol=Marco
DjScaffold1002  blastx  protein_match   44584   45176   145 -   .   ID=DjScaffold1002:hit:2834:3.10.0.0;Name=sp|Q7SIB2|CO4A1_BOVIN;Symbol=COL4A1

此外,我想保留第一个文件中未映射到第二个文件的行。

如何使用 awk 执行此操作?

最佳答案

您可以使用 awk 来合并它们:

awk 'FNR == NR{a[$1]=$2; next} $2 in a{$0 = $0 ";symbol=" a[$2]} 1' f2 FS='[|]' f1

L1  code=c|id1|;name=name1;symbol=symbol1
L2  code=c|id2|;name=name1;symbol=symbol2
L0  code=c|id0|;name=name0;

对于您编辑的样本:

awk 'FNR == NR{a[$1]=$2; next} $2 in a{$0 = $0 ";symbol=" a[$2]} 1' f2 FS='[|]' f1

DjScaffold1002  blastx  protein_match   50305   51044   125 -   .   ID=DjScaffold1002:hit:2832:3.10.0.0;Name=sp|Q9UEW3|MARCO_HUMAN;symbol=MARCO
DjScaffold1002  blastx  protein_match   50305   50892   208 -   .   ID=DjScaffold1002:hit:2833:3.10.0.0;Name=sp|Q60754|MARCO_MOUSE;symbol=Marco
DjScaffold1002  blastx  protein_match   44584   45176   145 -   .   ID=DjScaffold1002:hit:2834:3.10.0.0;Name=sp|Q7SIB2|CO4A1_BOVIN;symbol=COL4A1

关于linux - 在 Linux 中部分合并 2 个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531757/

相关文章:

c - 使用 qsort 函数对结构进行排序

linux - 在 vim 编辑器中打开同一个文件时,如何列出写入文件的路径下的内容?

linux - 用于在正确路径中运行 Java 类的通用脚本

regex - 如何在shell中拆分字符串

linux - 列出所有用户目录并查找特定文件

shell - 从 nmcli 输出中获取以太网连接 ID

linux - 如果进程已经在运行则终止 bash 脚本

linux - CRON bash 执行结果不同于手动启动

linux - 使用 Shell 计算多个文件的平均值而不考虑缺失值

linux - 带有错误栏和线点的 GNUplot 混合图