770行のテキストファイルを変更し、それぞれに異なるヘッダーを追加する必要があります。たとえば、次のようになります。
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
そして、私はこれを取得したい:
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Sedソリューションを具体的に求めたので(実際にこの方法で行うことはお勧めしませんが、可能です):
$ sed = file | sed '1~2 s/^/>seq/'
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
最初の呼び出しsed = file
は裸の行番号を挿入し、2番目の呼び出しは>seq
文字列を先頭に追加してそれらを修飾します。
OTOH 770の回線があることを事前に知っていれば、できる
printf ">seq%d\n" {1..770} | sed 'R file'
ただし、これはGNU sed R
拡張機能に依存しています。
Rファイル名
読み取られるファイル名の行をキューに入れ、現在のサイクルの終了時、または次の入力行が読み取られたときに出力ストリームに挿入されます。 filenameを読み取れない場合、またはファイル名の最後に達した場合、エラーは表示されず、行は追加されないことに注意してください。
もちろん、事前に行数がわからない場合は、could
printf ">seq%d\n" $(seq 1 "$(wc -l < file)") | sed 'R file'
ただし、ファイルを1回読み取るだけで済むという利点は失われます。
実際には、おそらく @ John1024のawkソリューション または同等のPerlを使用します
Perl -lpe 'print ">seq" . $.' file
タスクはsedで実行できますが、sedには算術のネイティブな理解がないため、間違ったツールになります。 Awkはうまく機能します。
$ awk '{print ">seq" NR} 1' file
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
使い方:
print ">seq" NR
新しい行が読み込まれるたびに、最初に必要なヘッダーが出力されます。
NR
はawkの行カウンターです。
1
これは、行を印刷するためのawkの不可解な速記です。
単純なループを使用する:
count=1; while read -r line ; do printf '>seq%d\n%s\n' $((count++)) "$line"; done < file
出力:
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
paste
を使用:
paste -d '\n' <(seq -f '>seq%g' 1 4) file
seq -f '>seq%g' 1 4
は、改行で区切られた数値を標準出力に書き込みますpaste
は、区切り文字で区切られた各ファイルの対応する行を連結します-d '\n'
は、連結区切り文字をデフォルトのタブではなく改行に設定します