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