2016-10-19 16 views
0

私はunixコマンドを使ってこれを行うことができるのか、pythonのようなもっと複雑なコードが必要なのかよくわかりません。フィールドに応じてファイルを分割して内容を編集する方法

私は3つの列(id、異なる列(2列目)、異なるグループ(3列目))にグループ化された大きな入力ファイルを持っています。

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

このシェルスクリプトは、トリックを行う必要があります。

data.txtは、元のデータを含むファイルの名前です
#!/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}" 

重要なことに、グループファイルは、スクリプトを実行する前に存在してはいけません。

+0

提案してくれてありがとうございます。このコマンドはうまくいきました。 – Paul

2

AWKは、トリックを行います:

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

このコマンドもうまくいきましたが、出力は.txtではありませんでした。理由はわかりませんが、別のファイルが作成されました。 – Paul

+0

".txt"を二重引用符。私はそれを修正します。 .txt拡張子を追加する以外は出力には影響しません。 –

+0

偉大な、それは非常に簡単で効果的です!ありがとう – Paul

関連する問題