2016-10-19 99 views
0

我不確定是否可以使用unix命令執行此操作,或者我需要更復雜的代碼,如python。如何根據字段拆分文件並編輯內容

我有一個很大的輸入文件,有3列-id,不同的序列(第二列)分組在不同的組中(第三列)。

Seq1  MVRWNARGQPVKEASQVFVSYIGVINCREVPISMEN  Group1 
Seq2  PSLFIAGWLFVSTGLRPNEYFTESRQGIPLITDRFDSLEQLDEFSRSF Group1 
Seq3  HQAPAPAPTVISPPAPPTDTTLNLNGAPSNHLQGGNIWTTIGFAITVFLAVTGYSF Group20 

我想: 分裂根據所述組ID這個文件,並且爲每個組創建單獨的文件;編輯每個文件中的信息,在ID的開頭添加一個「>」符號;然後爲該序列創建一個新行

Group1.txt file 
>Seq1 
MVRWNARGQPVKEASQVFVSYIGVINCREVPISMEN  
>Seq2 
PSLFIAGWLFVSTGLRPNEYFTESRQGIPLITDRFDSLEQLDEFSRSF 

Group20.txt file 
>Seq3 
HQAPAPAPTVISPPAPPTDTTLNLNGAPSNHLQGGNIWTTIGFAITVFLAVTGYSF 

我該怎麼做?

+0

有你自己嘗試新鮮事物? –

回答

1

這個shell腳本應該做的伎倆:

#!/usr/bin/env bash 

filename="data.txt" 
while read line; do 
    id=$(echo "${line}" | awk '{print $1}') 
    sequence=$(echo "${line}" | awk '{print $2}') 
    group=$(echo "${line}" | awk '{print $3}') 
    printf ">${id}\n${sequence}\n" >> "${group}.txt" 
done < "${filename}" 

其中data.txt是包含原始數據文件的名稱。

重要的是,在運行腳本之前,組文件不應該存在。

+0

感謝您的建議,這個命令工作得很好 – Paul

2

AWK將這樣的伎倆:

awk '{ print ">"$1 "\n" $2 >> $3".txt"}' input.txt 
+0

這個命令它的工作,但輸出不是.txt,我不知道爲什麼,但它創建了不同的文件 – Paul

+0

是的,忘了把「.txt」放在雙引號。我會解決它。除了添加.txt擴展名外,它對輸出沒有影響。 –

+0

太棒了,它非常簡單有效!謝謝 – Paul

相關問題