0

これは私の入力がどのように見えるかです:

>a
AACTCTCTC
CGTGCTCTC
>b_random
ACTGSTSTS
CTCTCTCCT
ATATATA
>c
AACTCTCTC
CGTGCTCTC
>d
AACTCTCTC
CGTGCTCTC
CGTGCTCTC
>e_random
ACTGSTSTS
CTCTCTCCT
ATATATA
>c_random
ACTGSTSTS
CTCTCTACT
GSTSTSCTC
TCTCCTCCT
ATATATA

「random」という語句を含むすべてのシーケンスを削除したいと考えています。シーケンスは常に ">" で始まり、別のシーケンスが始まると終了します。

この場合、3 つのファイルを取得したいと思います。

a.txt

>a
AACTCTCTC
CGTGCTCTC

c.txt

>c
AACTCTCTC
CGTGCTCTC

d.txt

>d
AACTCTCTC
CGTGCTCTC
CGTGCTCTC

今のところ、どうにかして sed に自分のやりたいことを強制することはできません。私はこれから始めました:

 sed 's/random.*random//g' sample_data

何が機能していません。どうもありがとうございました。

4

4 に答える 4

2

ここに行く最も簡単な方法は、おそらく awk と適切な RS/ORS 設定を使用することです。

awk '$1 !~ /random/ { print RS $0 > $1 ".txt"; close($1 ".txt" }' RS='>' ORS=''

スペースを含む説明行がある場合はFS='\n'、同様に設定する必要があります。

于 2013-02-19T08:59:00.710 に答える
2

awkこれを使用して大きなファイルを処理する方法の 1 つを次に示します。

awk '/^>/ { i=substr($0,2) } i ~ /random/ { i="" } i { print > i ".txt" }' file

の結果grep . *.txt:

a.txt:>a
a.txt:AACTCTCTC
a.txt:CGTGCTCTC
c.txt:>c
c.txt:AACTCTCTC
c.txt:CGTGCTCTC
d.txt:>d
d.txt:AACTCTCTC
d.txt:CGTGCTCTC
d.txt:CGTGCTCTC
于 2013-02-19T10:33:58.373 に答える
1
awk '/\>/ && $0!~/random/{file=substr($0,2)".txt";f=1}{if($0~/random/)f=0;if(f)print>file}' your_file
于 2013-02-19T10:36:19.937 に答える
1

制限を回避するために RS を使用しない別の awk

awk -F\> '/>/{close(f); f=/random/?x:$2 ".txt"} f{print>f}' file

一部の awks は連結された印刷ターゲットを処理できないため、このバージョンもファイルを閉じ、ファイル名に変数を使用します。

于 2013-02-19T14:39:16.347 に答える