sedパイプを使用して、偶数行と奇数行の小文字を「-」に変更する方法は?

sedパイプを使用して、偶数行と奇数行の小文字を「-」に変更する方法は?

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次に変更します。cg-

$ 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

おすすめ記事