何百万ものDNA配列を含む大容量の.fnaファイルがあります。プライマーを切断した後、いくつかの書き込みエラーのためにいくつかのシーケンスヘッダーが残り、その後にシーケンスがありません。以下に例を示します。ワークフロースクリプトを引き続き使用できるように、これらのヘッダーと空白行を削除する必要があります。
B2S312_20116609 HWI-ST1128:217:D2HB4ACXX:8:1101:20814:45721 orig_bc=CCGCATAA new_bc=CCGCATAA bc_diffs=0
AACCATGCACCACCTGTATCTGTGTCTAACCAAAGGTCAGAACAACACAATCTCTTGTGTCCTCACAGTATGTCAAGACTT
B4S315_20116610 HWI-ST1128:217:D2HB4ACXX:8:1101:20948:45746 orig_bc=ATATGCCG new_bc=ATATGCCG bc_diffs=0
AACCATGCACCACCTGCACACGACCAACTAAATGCCACCACATCTCTGCAGTGTCGCCGTGCATGTCAAGCCTT
A3C214_20116611 HWI-ST1128:217:D2HB4ACXX:8:1101:20874:45747 orig_bc=GATCCAAC new_bc=GATCCAAC bc_diffs=0
A2C214_20116612 HWI-ST1128:217:D2HB4ACXX:8:1101:21248:45534 orig_bc=CCTAGGAT new_bc=CCTAGGAT bc_diffs=0
AACCGTGCACCACCTGTTTTCTGGCTTCCGAAGAAGAGGAACTATCTCTAGTTCTGTCCATCAATGTCAAGACCT
A3C214_20116611 HWI-ST1128:217:D2HB4ACXX:8:1101:20874:45747 orig_bc=GATCCAAC new_bc=GATCCAAC bc_diffs=0
したがって、この例では、その行とその下の空の行を削除したいと思います。
sedだけを使用して空の行を削除しましたが、私のシナリオに適した例が見つかりませんでした。
答え1
sed '$!N;/:.*\n$/d;P;D' <infile
上記のコマンドは、N
最後の行ではなくすべての行から追加の行を取得します。コロンが見つかり、最後の文字が改行されたパターン空間を見つけた場合、バッチは削除されます。つまり、コロンを含む行と次の行が空の場合、両方が削除されます。他のすべての場合は、パターンスペースに最初に表示されるewlineまで印刷し、残りの部分から始める前に同じ内容を削除します。これにより、ファイル全体で1行のプレビューを実行できます。!
$
:
\n
P
\n
D
答え2
(以下の解決策については、各ヘッダ+シーケンス行の前に空白行をしたいとします。後ろに空白行が必要な場合は教えてください。簡単に変更できます。)
使用sed
$ sed -rn 's/(.{106})/\n\1/p' file
B2S312_20116609 HWI-ST1128:217:D2HB4ACXX:8:1101:20814:45721 orig_bc=CCGCATAA new_bc=CCGCATAA bc_diffs=0 AACCATGCACCACCTGTATCTGTGTCTAACCAAAGGTCAGAACAACACAATCTCTTGTGTCCTCACAGTATGTCAAGACTT
B4S315_20116610 HWI-ST1128:217:D2HB4ACXX:8:1101:20948:45746 orig_bc=ATATGCCG new_bc=ATATGCCG bc_diffs=0 AACCATGCACCACCTGCACACGACCAACTAAATGCCACCACATCTCTGCAGTGTCGCCGTGCATGTCAAGCCTT
A2C214_20116612 HWI-ST1128:217:D2HB4ACXX:8:1101:21248:45534 orig_bc=CCTAGGAT new_bc=CCTAGGAT bc_diffs=0 AACCGTGCACCACCTGTTTTCTGGCTTCCGAAGAAGAGGAACTATCTCTAGTTCTGTCCATCAATGTCAAGACCT
どのように動作しますか?
-r
-r
sed
拡張正規表現を使用するように指示します。-n
-n
sed
明示的に要求されない限り、行を印刷しないでください。s/(.{106})/\n\1/p
行に106文字以上がある場合は、先頭に改行文字を追加して印刷します。
空白行には106文字がないため、印刷されません。
DNA配列のない行は106文字より短いため印刷されません。
DNA配列を含むラインを印刷します(106文字以上)。空白行自体は印刷されないため、行の先頭に改行文字を追加する必要があります。これにより、各DNAレコードの前に空白行が続きます。
GNUではないsed
OSX(BSD)を使用している場合は、以下を試してください。
sed -E -n -e 's/(.{106})/\n\1/p' file
使用awk
awk '$6 {print "\n"$0}' file
DNA配列は行の6番目のフィールドです。したがって、空でない6番目のフィールドがある行の場合は、その行の前に改行文字を印刷します。
答え3
これを使ってこれを行うことができることに言及したいと思いましたvi
。
:g/PATTERN/normal 2dd
PATTERN
あなたが探しているものはどこにありますか?その後、パターンに従って一致してPATTERN
実行されます2dd
(行削除 - 2回)。normal
答え4
Ex/viを使う
@ReulSharabin が提案したコマンドを実行します。
ex -s +'g/bc_diffs=0$/d +2' +x file
これは次のようになります。
vim +':g/bc_diffs=0$/d +2' +:x file
(+コマンド = コマンド実行; +x
= 保存と終了)
わかりました、わかりました、これは悪い考えです。