2017-11-27 8 views
1

異なるゲノム領域を持つファイルをソートしようとしていますが、各領域には数字の組み合わせである&があります。ファイルをソートして別のファイルに配置する

ゲノムの位置がそれぞれ(columns1,2,3)であり、3つが同じ場合は、 とし、それを新しい別のファイルに抽出します。

私の入力は次のとおりです。

1.txt 
chr1 10 20 . . 00000 ACTGBACA 
chr1 10 20 . + 11111 AACCCCHQ 
chr1 18 40 . . 0 AA12KCCHQ 
chr7 22 23 . . 21 KLJMWQKD 
chr7 22 23 . . 8 XJKFIRHFBF24 
chrX 199 201 . . KK AVJI24 

私は期待してい何かがある:

chr1.10-20.txt 
chr1 10 20 ACTGBACA 
chr1 10 20 AACCCCHQ 


chr1.18-40.txt 
chr1 18 40 AA12KCCHQ 

chr7.22-23.txt 
chr7 22 23 KLJMWQKD 
chr7 22 23 XJKFIRHFBF24 

chrX.199-201.txt 
chrX 199 201 AVJI24 

私はawkで文書を分割試しましたが、それは私が何をしたいのかではありません。

awk -F, '{print > $1$2$3".txt"}' 1.txt 

私は列1,2,3および7

>ls 
1.txt         
chr1 10 20 . + 11111 AACCCCHQ.txt 
chr7 22 23 . . 21 KLJMWQKD.txt  
chrX 199 201 . . KK AVJI24.txt 
chr1 10 20 . . 00000 ACTGBACA.txt 
chr1 18 40 . . 0 AA12KCCHQ.txt  
chr7 22 23 . . 8 XJKFIRHFBF24.txt 

>cat chr1\ \ \ \ 10\ \ 20\ .\ +\ 11111\ AACCCCHQ.txt 
chr1 10 20 . + 11111 AACCCCHQ 
を必要としていても、それは私にすべての行を含むファイル名を与え、ファイル内の、それが再び行全体であります

ファイル名とその内容を修正する方法を教えていただければ幸いです。

答えて

1

はこれを見てください:

#!/bin/sh 
INPUT="$1" 

while read -r LINE; do 
    GEN_LOC="$(echo "$LINE" | tr -s ' ' '.' | cut -d '.' -f 1,2,3)" 
    echo "$LINE" | tr -s ' ' | cut -d ' ' -f 1,2,3,6,7 >> "${GEN_LOC}.txt" 
done < "$INPUT" 

このスクリプトは、あなたが投稿した形式で入力ファイルを取得し、行ごとにそれを読み込みます。各行について、追加の空白をファイル名のドットに置き換え、フィールド1,2,3(それを$GEN_LOC変数に格納)に切り捨てます。次に、${GEN_LOC}.txtというファイルに$LINEの全体を追加します。同じファイル名に出力される複数の行がある場合は、その行はちょうど追加されます。これは前回の実行を考慮しないため、これを2回実行すると、既存のファイルに継続的に追加されます。お役に立てれば!

+0

ありがとうございますが、「。」では動作しません。そして、 '3行目:構文エラーが発生したとき、またはその近くで' – bapors

+0

あなたは何を意味するのかを明確にすることはできますか?あなたはbashや他のシェルを使っていますか? –

+0

私はbashを使用していて、このスクリプトをawk awkscript.awk 1.txtとして実行しています。これは上記のエラーをコメントしてくれます。 – bapors

関連する問題