2017-07-26 16 views
1

awkまたはsedでbashでこれを行うことが可能かどうか疑問に思っていました。文字列に一致する最初の4文字または最後の4文字の文字列を確認してください。

私は、次のサンプル・ファイルを持っている:

HISEQ:272:CB0A0ANXX:3:1112:15781:21284_1:N:0:CATCAC 0 ITR3p_deleted 84279 41 35= * 0 0 TTAAGGAGGCTTCCTTTTCTAAACGATTGGGTGAG JJJ0JIIIIJJJJJJJJJJJJJJJJIJJJIHJJJJ NM:i:0 AM:i:41 
HISEQ:272:CB0A0ANXX:3:1115:13546:24638_1:N:0:CATCAC 16 ITR3p_deleted 84279 39 15= * 0 0 TTAAGGAGGCTTCCT BB/FFFF//FBBBBB NM:i:0 AM:i:39 
HISEQ:272:CB0A0ANXX:3:1114:4292:31240_1:N:0:CATCAC 16 ITR3p_deleted 83635 45 179= * 0 0 AGATCCTATTAGATACATAGATCCTCGTCGCGATATCGCATTTTCTAACGTGATGGATATATTAA BBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIJIJJIJJJJJJJJ8JJJJJFFFFFFFFFFFFFFFFFFFFBFFFFFF<FFFFFFFFFFFFFFFFB<<FB<//<< NM:i:0 AM:i:45 
HISEQ:272:CB0A0ANXX:3:2104:14047:17929_1:N:0:CATCAC 16 ITR3p_deleted 84274 33 5X120= * 0 0 TAAGGTTAAGGAGGCTTCCTTTTCTAATAATGATATGTATCAATCGGTGTGTAGAAAGTGTTACATCGACTCATAATATTATATTT F7/FFFFBF77///F/7FF/<</</FBF</<<F</B//<//FFFFFFB/F/FBFBF//</F/F</F<<FBBFFFFFFFFFFFF<FFFBFFFFBFF<F<FFFB/F/FBFFFFFFFFFFBFB/</<< NM:i:5 AM:i:33 

をそして私は10列の文字列をチェックしたいです。最初の2つの例のようにTTAAで始まる場合、それらのレコードをファイル1に抽出します。 3番目の例のようにTTAAで終了する場合、これをファイル-2に抽出したいと思います。 4番目のレコードは無視されます。

awkと一致する文字列が見つからないようです。

ありがとうございました。

+1

awkで試したコードを特定の列とマッチさせるために追加してください。あなたは '$ 10〜/^TTAA /'や '$ 10〜/ TTAA $ /'などを使うことができます。 – Sundeep

+0

ここでDNA配列決定で何かしていますか? – rigglesbee

+0

絶対に、これはsamファイル形式です。私がしようとしているのは、TTAAで開始または終了をマッピングした読み取りを特定することです。私はゲノムのTTAAサイトあたりの読み込み量を数えたいと思います。途中でTTAAが起こることがあります。私はそれらを数えたくありません。 –

答えて

3

試してください。

cat samplefile.txt | while read line; do 
    if [[ $(echo "$line" | awk '{print $10}' | grep '^TTAA') ]]; then 
    echo "$line" >> file-1.txt 
    fi 
    if [[ $(echo "$line" | awk '{print $10}' | grep 'TTAA$') ]]; then 
    echo "$line" >> file-2.txt 
    fi  
done 
+1

私はあなたのものが私のものよりも好きです。時間は約1/10になります。もし私がawkについてもっと知っていれば。 – rigglesbee

1

sed -rne '/^(\S+\s+){9}TTAA/w file1' -e '/^(\S+\s+){9}\S+TTAA\>/w file2' file 

のInvoke SEDSのgrepのような性質とに応じて別々のファイルに書き込みます正規表現。

N.B. regexpがマッチするならば、出力ファイルの両方に1行書き込むことができます。

+0

これは、特定の列のみをgrepする非常に良い方法です –

0

これは(GNUのSED)あなたのために働くかもしれない:これはトリックを行う必要があります

awk '$10 ~ /^TTAA/{print > "file-1";next} $10 ~ /TTAA$/{print > "file-2"}' Input_file 
関連する問題