gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:10 24 4
gpt4 key购买 nike

我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com