2016-07-22 42 views
1

我有2個文本文件,我想將它們合併到一個新文件中。在Linux中部分合並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列字符串的映射部分文件,應該是這樣的:

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 

此外,我想保持從第一個文件哪一行e未映射到第二個文件。

如何用awk執行該操作?

+2

你,如果你用awk,因爲AWK可以做什麼有用的東西,從來沒有需要的grep grep可以做到。 –

+0

我很抱歉,但這個命令不適用於我的文件。 – user3616494

回答

2

您可以使用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 
+0

它適用於顯示的樣本數據。如果你的數據不同,你應該相應地更新問題。 – anubhava

+1

親愛的@anubhava你最後的版本正常工作。我感謝你的幫助。艾哈邁德 – user3616494