何千行もの長さのDNA配列の 'ヘッダー'行内の列/フィールドを変更しようとしています。具体的には、私はヘッダ(compX_seqy)の最初のフィールドを変更したい、これは常に「>」で始まる:AWK - 一致する行の特定の列を置き換えて、他の行を印刷します。
ちょうど最初の2つのシーケンスの例:
#cat example
>comp0_seq1 444 [12:23]
AGAGGACAC
GATCCAACATA
AGASCAC
>comp0_seq2 333 [12:32:599:1]
GTCGATC
CYAACY
CCCCA
...
は、私が追加したいと最初の列の末尾に「A」が、「>」で始まるすべての行に対して、
comp0_seq1A
は、行の残りの部分を出力して、NEX次の ">"行に到達するまで繰り返されます。
私は、出力は次のようになりたい:
>comp0_seq1A 444 [12:23]
AGAGGACAC
GATCCAACATA
AGASCAC
>comp0_seq2A 333 [12:32:599:1]
GTCGATC
CYAACY
CCCCA
...
私が最初にこれを試してみました:
awk '$1=$1"A"' example
>comp0_seq1A 444 [12:23]
AGAGGACACA
GATCCAACATAA
AGASCACA
>comp0_seq2A 333 [12:32:599:1]
GTCGATCA
CYAACYA
CCCCAA
A
A
それは、すべての行の最初のフィールドにAを追加し、そうではない、非常に。
は、その後、私は
# awk '/^>/ {print $1=$1"A";getline;print $0}' example
>comp0_seq1A
AGAGGACAC
>comp0_seq2A
GTCGATC
しかし、唯一の試合後の最初の行を表示することを「>」で始まる行だけを交換するために正規表現を使用して、これを試してみました。だから、マッチ/置換後、そして次の ">"までのすべての行を印刷する方法は?私は '次へ'を使用しようとしましたが、この文脈でどのように使用するのか分かりません。
アドバイスはありますか?私は私が近くにいることを知っているし、私のキーボードで頭を叩いている。
Thx、LP。
sedを使うと、そのファイルにタブがある場合に "空白"文字クラスを使って 'sed '/ ^> [^ [:blank:]] \ +/s //&A /''と書くことができます。 –
すべてのオプションをありがとう。だから、sed/substituteを使ってスペースを追加の文字に置き換えるだけで簡単です。 –
@glennjackman - ああ、 '&'を使うことをお勧めします。私は答えをそのまま残しておきます。それはOPのデータで動作するようですが、コメントをいただきありがとうございます。それは間違いなく類似しているかもしれない他の人々を助けるでしょう。 – ghoti