Linux
如何使用 sed 管道將偶數行和奇數行中的小寫字母更改為“-”?
我想使用 Unix 命令將小寫序列 (a,t,c,g) 轉換為“-”。但它沒有將文件保存到位。相反,它顯示錯誤並刪除終端中的“-i”輸出,但不會更改文件中的任何內容。但是,它會在終端中為以下程式碼輸出所需的結果,但不會更改文件。可以看到在header資訊之後,還有sequence pair。我只想更改序列對,保持標題資訊不變。該文件的性質是:
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'
我會改用
perl
它,因為它具有$.
保存目前行號的特殊變數。因此,如果$.
模 2 為 0 (if $. % 2 == 0
),那麼我們將所有出現的a
、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