Unixコマンドを使用して、小文字のシーケンス(a、t、c、g)を「-」に変換したいと思います。しかし、ファイルを所定の場所に保存しませんでした。代わりにエラーを表示し、端末から「-i」出力を削除しますが、ファイルでは何も変更しません。ただし、端末には次のコードの目的の結果が出力されますが、ファイルは変更されません。ヘッダ情報の後にシーケンスペアが続くことがわかります。ヘッダ情報は同じままで、シーケンスのペアだけを変更したいと思います。このファイルの性格は次のとおりです。
0 chr1 11680 11871 chr6 28206109 28206336 - 4581
ctggagattctta-ttagtgatttgggctggggcc-tggccatgtgtattttttta-aatttccactgatgattttgctgcatggccggtgttgagaatgactgCG-CAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGCACCGGGTATCATTCAC----------------------------------------------CATTTTTCTTTTCGTT
-TAGGGAGTCTTAGTCAAAGGTTTGGACCAAGTCCCTGGCCATGCAGATCTTTGTAGAATCTCCACTCGTGACTTTCCTGCATAACCAGAGTTGAGCATCTTTGAGTCAAGTGTGCCA-ACTTTCTTTGCTGTT-------------TAAATAAGGATGCCAACACCGCATGTCATTAACAGTCTCGTAGGTTGATTGATTTGTTGGCTGGCTCAAAAATGAGAGTTATTTTTCATTTTGTT
1 chr1 11872 12139 chr6 28206484 28206708 - 4257
AACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTTCATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCAT-TGTTCATCTTCTGGCCCCTGTTGTCT
AGTTTTCTGTCTGCTAATT-TGCCACCAGTCATTTCCTATTACGTGTGTCTGCTGCCTCCTAGCCCAGGCT-----TGCCCTTCCTCCC--TCTTCTGAGGTGTCATAGGGTCGTGAC--------------------TTACCTGGTTTGGGGGAGTAGTTGG---------------AAGCTGAGTGA-GTGGTGGGGTTTTCTTATGCTAAAGACCTGCGTCCAGTATAGGAAGAGCCATGTGCCTCCACTCTGGCCCTTGTGGTCT
2 chr1 12177 12259 chr17 66149263 66149338 + 3811
GATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAACCTAGGCCAGTAAGTAGTGCTTGTGCTCATCTCCTTGGCTG
GGTTGGAGGGAAGATGAGTGAAGGGATCAATTTCTCTGATGACCTGGGCCGGTAGG-------TGTGGTGTCCTCTTTGTCTG
希望の出力:
0 chr1 11680 11871 chr6 28206109 28206336 - 4581
---------------------------------------------------------------------------------------------------------CG-CAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGCACCGGGTATCATTCAC----------------------------------------------CATTTTTCTTTTCGTT
-TAGGGAGTCTTAGTCAAAGGTTTGGACCAAGTCCCTGGCCATGCAGATCTTTGTAGAATCTCCACTCGTGACTTTCCTGCATAACCAGAGTTGAGCATCTTTGAGTCAAGTGTGCCA-ACTTTCTTTGCTGTT-------------TAAATAAGGATGCCAACACCGCATGTCATTAACAGTCTCGTAGGTTGATTGATTTGTTGGCTGGCTCAAAAATGAGAGTTATTTTTCATTTTGTT
1 chr1 11872 12139 chr6 28206484 28206708 - 4257
AACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTTCATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCAT-TGTTCATCTTCTGGCCCCTGTTGTCT
AGTTTTCTGTCTGCTAATT-TGCCACCAGTCATTTCCTATTACGTGTGTCTGCTGCCTCCTAGCCCAGGCT-----TGCCCTTCCTCCC--TCTTCTGAGGTGTCATAGGGTCGTGAC--------------------TTACCTGGTTTGGGGGAGTAGTTGG---------------AAGCTGAGTGA-GTGGTGGGGTTTTCTTATGCTAAAGACCTGCGTCCAGTATAGGAAGAGCCATGTGCCTCCACTCTGGCCCTTGTGGTCT
2 chr1 12177 12259 chr17 66149263 66149338 + 3811
GATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAACCTAGGCCAGTAAGTAGTGCTTGTGCTCATCTCCTTGGCTG
GGTTGGAGGGAAGATGAGTGAAGGGATCAATTTCTCTGATGACCTGGGCCGGTAGG-------TGTGGTGTCCTCTTTGTCTG
#for even lines
sed -n 2~2p h.txt| sed 's/a/-/g' | sed 's/t/-/g' | sed 's/c/-/g' | sed 's/g/-/g'
#for odd lines
sed -n 1~2p h.txt| sed -n 2~2p | sed 's/a/-/g'| sed 's/t/-/g' | sed 's/c/-/g' | sed 's/g/-/g'
答え1
現在行番号を保持する特殊変数がperl
あるため、これを使用します。$.
したがって、$.
モジュロ2が0(if $. % 2 == 0
)の場合、ora
のすべての発生をt
次に変更します。c
g
-
$ perl -pe 's/[actg]/-/g if $. % 2 == 0' file
0 chr1 11680 11871 chr6 28206109 28206336 - 4581
--------------------------------------------------------------------------------------------------------CG-CAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGCACCGGGTATCATTCAC----------------------------------------------CATTTTTCTTTTCGTT
cTAGGGAGTCTTAGTCAAAGGTTTGGACCAAGTCCCTGGCCATGCAGATCTTTGTAGAATCTCCACTCGTGACTTTCCTGCATAACCAGAGTTGAGCATCTTTGAGTCAAGTGTGCCA-ACTTTCTTTGCTGTT-------------TAAATAAGGATGCCAACACCGCATGTCATTAACAGTCTCGTAGGTTGATTGATTTGTTGGCTGGCTCAAAAATGAGAGTTATTTTTCATTTTGTT
1 chr1 11872 12139 chr6 28206484 28206708 - 4257
AACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTTCATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCAT-TGTTCATCTTCTGGCCCCTGTTGTCT
AGTTTTCTGTCTGCTAATT-TGCCACCAGTCATTTCCTATTACGTGTGTCTGCTGCCTCCTAGCCCAGGCT-----TGCCCTTCCTCCC--TCTTCTGAGGTGTCATAGGGTCGTGAC--------------------TTACCTGGTTTGGGGGAGTAGTTGG---------------AAGCTGAGTGA-GTGGTGGGGTTTTCTTATGCTAAAGACCTGCGTCCAGTATAGGAAGAGCCATGTGCCTCCACTCTGGCCCTTGTGGTCT
2 chr1 12177 12259 chr17 66149263 66149338 + 3811
GATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAACCTAGGCCAGTAAGTAGTGCTTGTGCTCATCTCCTTGGCTG
GGTTGGAGGGAAGATGAGTGAAGGGATCAATTTCTCTGATGACCTGGGCCGGTAGG-------TGTGGTGTCCTCTTTGTCTG
ソースファイルを変更するには、次を使用します-i
。
perl -i -pe 's/[actg]/-/g if $. % 2 == 0' file
しかし、実際には偶数行だけを望むわけではないと思います。シーケンス行の小文字の残余をダッシュに変更したいようです。その場合は、空白を含まない行に集中して変更できます。
$ perl -pe 's/[actg]/-/g if !/ /' file
0 chr1 11680 11871 chr6 28206109 28206336 - 4581
--------------------------------------------------------------------------------------------------------CG-CAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGCACCGGGTATCATTCAC----------------------------------------------CATTTTTCTTTTCGTT
-TAGGGAGTCTTAGTCAAAGGTTTGGACCAAGTCCCTGGCCATGCAGATCTTTGTAGAATCTCCACTCGTGACTTTCCTGCATAACCAGAGTTGAGCATCTTTGAGTCAAGTGTGCCA-ACTTTCTTTGCTGTT-------------TAAATAAGGATGCCAACACCGCATGTCATTAACAGTCTCGTAGGTTGATTGATTTGTTGGCTGGCTCAAAAATGAGAGTTATTTTTCATTTTGTT
1 chr1 11872 12139 chr6 28206484 28206708 - 4257
AACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTTCATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCAT-TGTTCATCTTCTGGCCCCTGTTGTCT
AGTTTTCTGTCTGCTAATT-TGCCACCAGTCATTTCCTATTACGTGTGTCTGCTGCCTCCTAGCCCAGGCT-----TGCCCTTCCTCCC--TCTTCTGAGGTGTCATAGGGTCGTGAC--------------------TTACCTGGTTTGGGGGAGTAGTTGG---------------AAGCTGAGTGA-GTGGTGGGGTTTTCTTATGCTAAAGACCTGCGTCCAGTATAGGAAGAGCCATGTGCCTCCACTCTGGCCCTTGTGGTCT
2 chr1 12177 12259 chr17 66149263 66149338 + 3811
GATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAACCTAGGCCAGTAAGTAGTGCTTGTGCTCATCTCCTTGGCTG
GGTTGGAGGGAAGATGAGTGAAGGGATCAATTTCTCTGATGACCTGGGCCGGTAGG-------TGTGGTGTCCTCTTTGTCTG
標準出力に戻すのではなく、元のファイルを変更するには、次のようにします-i
。
perl -i -pe 's/[actg]/-/g if !/ /' file
答え2
偶数/奇数をどのように説明するのか分からないので見つけました。
sed '/[^acgtACGT-]/!s/[acgt]/-/g' file
a、c、g、t、A、C、G、T、または「-」以外の文字を含む行は変更されずに印刷されます。残りの行はすべて小文字を「-」に置き換え、一時ファイルにリダイレクトされ、元のファイルを上書きします。
答え3
デフォルトでは、a、t、c、gを使用して1行に-を使用できます。
sed -i 's/[atcg]/-/g' FILE
もちろん、これはすべての行を変更します。これを適用する場所を選択する必要があります。一般に、一種のパターンマッチングを使用してこれを行うのが最善ですが、行番号に基づいて行う必要がある場合は、最初に作成する次のコマンドの機能を理解する必要があります。
sed -n 1~2p h.txt| sed -n 2~2p ...
これは実際には3番目の数字から始まり、4番目のステップごとに印刷され、次のように置き換えることができます3~4
。
したがって、以下を組み合わせてください。
sed -i '2~2s/[atcg]/-/g; 3~4s/[atcg]/-/g' FILE
ちなみに、2~2
これは4行目ごとに空であるため、この場合にのみ機能します。この場合、2~4
空行を操作せずに実際に置き換えることができます。
しかし、とにかくほとんどの人は、パターンマッチングを通じて「タイトル」行と「タイトルなし」行を区別することです。たとえば、すべてのヘッダー行(およびただヘッダ行)は数字で始まるので、次のように無視できます。
sed -i '/^[0-9]/! s/[atcg]/-/g' FILE