#linux #database #bash #sed #bioinformatics
Вопрос:
У меня есть файл под названием «Jimbleprot.pep», и он выглядит так:
119 gt;TRINITY_DN10025_c0_g1::TRINITY_DN10025_c0_g1_i1::g.7937::m.7937 TRINITY_DN10025_c0_g1::TRINITY_DN10025_c0_g1_i1::g.7937 ORF type:5prime_partial len:201 (-),score=29.41 TRINITY_DN10025_c0_g1_i1:192-794(-) 120DEDDEPQELQVHVDVSLPGTPLGSENSVHSGCSHKSNVSSSLVAA 123 TPTCVRLEEELHGPIRDGLS* 124 gt;TRINITY_DN10026_c0_g1::TRINITY_DN10026_c0_g1_i1::g.7944::m.7944 TRINITY_DN10026_c0_g1::TRINITY_DN10026_c0_g1_i1::g.7944 ORF type:internal len:115 ( ),score=15.25,NACHT|PF05729.12|0.068,Tti2|PF10521.9|0.1 4 TRINITY_DN10026_c0_g1_i1:2-343( ) 125 SVEDLAIKILTTCGIPAPSVGEKEKLQELLKIVTRKCLLILDNLDHAFHADDKRRDSMDK 126 SIRTTYKPSFSGNSTASSNISESSAAAFASSSANLPGIPTSISFAPYRSGIVHS 127 gt;TRINITY_DN10028_c0_g1::TRINITY_DN10028_c0_g1_i1::g.7938::m.7938 TRINITY_DN10028_c0_g1::TRINITY_DN10028_c0_g1_i1::g.7938 ORF type:5prime_partial len:223 (-),score=32.40,gi|114149223|sp|Q9NUQ8.2|ABCF3_HUMA N|66.97|6e-103,gi|114149223|sp|Q9NUQ8.2|ABCF3_HUMAN|23.39|7e-11,ABC_tran|PF00005.27|3.4e-23,AAA_21|PF13304.6|0.00057,AAA_21|PF13304.6|3.2e-05,SMC_N|PF02463.19|0.082,SMC_N|PF02463.19|6.7e-05,AAA_22|PF13401. 6|0.00019,AAA_30|PF13604.6|0.00038,AAA_16|PF13191.6|0.0019,AAA_29|PF13555.6|0.0081,NACHT|PF05729.12|0.0075,AAA_15|PF13175.6|0.015,AAA_15|PF13175.6|1.1e 03,Pox_A32|PF04665.12|0.01,Dynamin_N|PF00350.23|0.016 ,MobB|PF03205.14|0.026,DUF87|PF01935.17|0.039,DUF87|PF01935.17|3.3e 03,AAA_23|PF13476.6|0.033,AAA_24|PF13479.6|0.2,AAA_24|PF13479.6|1.1e 03,FtsK_SpoIIIE|PF01580.18|0.069,AAA_18|PF13238.6|0.079,AAA_18|PF132 38.6|3e 03,DLIC|PF05783.11|0.046,T2SSE|PF00437.20|0.063,SbcCD_C|PF13558.6|0.33,MMR_HSR1|PF01926.23|0.059,TniB|PF05621.11|36,TniB|PF05621.11|3.7,Arf|PF00025.21|0.27,Arf|PF00025.21|2.2e 03,AAA_19|PF13245.6|0 .18,TsaE|PF02367.17|0.23,Roc|PF08477.13|0.22 TRINITY_DN10028_c0_g1_i1:59-727(-) 128IAVVGDNGSGKTTLLKILLGELEPVKLATKFPGKNVEHYRHQLG RYGVSGDLATRFQGGVILVSHDERLVRSMCDEVWVCGNRQVKSIEGGFDQYKRMVQEELQAVLQ* 132 gt;TRINITY_DN1002_c0_g1::TRINITY_DN1002_c0_g1_i1::g.2343::m.2343 TRINITY_DN1002_c0_g1::TRINITY_DN1002_c0_g1_i1::g.2343 ORF type:5prime_partial len:174 ( ),score=44.19,EF-hand_7|PF13499.6|0.15,EF-hand_6|PF13 405.6|1.2,EF-hand_6|PF13405.6|8.8e 02,EF-hand_6|PF13405.6|6e 03,EF-hand_6|PF13405.6|1.3e 03,EF-hand_1|PF00036.32|0.16,EF-hand_1|PF00036.32|5.8e 03,EF-hand_1|PF00036.32|6.3e 03,EF-hand_1|PF00036.32|8.6e 03 TRINITY_DN1002_c0_g1_i1:2-523( ) 133 EQHPKIRMQIAQKVFNVLDPDKKGYANKDDIMALTVDKLKAIADIVDPDYANTEEYEHVL 134 FGEAEVRDAFQDALEEGNGELHLQKLIQKYKDLGGSEKVARELFAMLKPKSKDKATADEV 135 EENLSNVLELYKKIRDEDKSGIFYDRHLQEDKEIMAKTLHEKTDTDGTKHDEL* 136 gt;TRINITY_DN1002_c0_g1::TRINITY_DN1002_c0_g1_i2::g.2344::m.2344 TRINITY_DN1002_c0_g1::TRINITY_DN1002_c0_g1_i2::g.2344 ORF type:5prime_partial len:174 ( ),score=54.09,EF-hand_7|PF13499.6|0.13,EF-hand_8|PF13 833.6|1.6,EF-hand_8|PF13405.6|1.2,EF-hand_6|PF13405.6|1.5e 03,EF-hand_6|PF13405.6|6e 03,EF-hand_6|PF13405.6|8.8e 02,EF-hand_1|PF00036.32|0.16,EF-hand _1|PF00036.32|PF00036.32|6.7e 03 TRINITY_DN1002_c0_g1_i2:2-523( ) 137 EQHPKIRMQIAQKVFNVLDPDKKGYANKDDIMALTVDKLKAIADIVDPDYANTEEYEHVL 138 FGEEEVRDAFQDALEEGNGELHLQKLILKYKDLGGSEKVARELFAMLKPKSKDKATADEV 139 EENLSNVLELYKKIRDDDKSGVFYDRHLQEDKEIMAKTLDEGTNTDGAKHEEL*
и этот файл содержит более 8000 строк , я хочу использовать sed
команду для удаления *
в первой строке 5000 и вывода результата в новый файл под названием «newprot.fasta». Я думаю, что мне может понадобиться |
, чтобы head
, но я не уверен, как это сделать и использовать их в sed
команде. Спасибо!
Комментарии:
1. Должны ли выводиться все строки или только первые 5000 строк?
2. Пожалуйста, добавьте к своему вопросу (без комментариев): Что вы искали и что вы нашли? Что вы пробовали и как это получилось?
3. @удалены только первые 5000 строк
*
.
Ответ №1:
ed
является ли, как это обычно бывает, когда вы работаете с файлом вместо потока, который является частью конвейера, лучшим выбором, чем sed
здесь:
printf '%sn' '1,5000 g/*/s/*//g' '1,5000 w newprot.fasta' Q | ed -s Jimbleprot.pep
удалит все *
символы в первых 5000 строках файла, а затем сохранит эти первые 5000 строк в новом файле.
Также может быть записан с ed
помощью ввода в виде heredoc, если вы предпочитаете его для удобства чтения:
ed -s Jimbleprot.pep lt;lt;EOF 1,5000 g/*/s/*//g 1,5000 w newprot.fasta Q EOF
Ответ №2:
Мой способ состоит в том, чтобы разделить его на 3 части (может быть, есть лучший способ):
- возьмите только первые 5000 строк в новом файле и удалите
*
их .sed '5001,$ d' Jimbleprot.pep | tr -d '*' gt; temp_file.txt
- сохраните только последние 3000 — raws в
Jimbleprot.pep
файле:tail -n 5001 Jimbleprot.pep gt; test.tmp amp;amp; mv test.tmp Jimbleprot.pep
- Объедините все файлы в
newprot.fasta
:cat temp_file.txt Jimbleprot.pep gt; newprot.fasta
Это должно сработать, опять же, я не знаю, лучший ли это способ, но это мой способ.
Редактировать: если вам нужны только первые 5000 строк без *
просто выполните шаг 1.
Ответ №3:
Это может сработать для вас (GNU sed):
sed '1,5000s/*//g;w newprot.fasta' Jimbleprot.pep
Это изменит первые 5000 строк, удалив все *
» s » и записав каждую строку newprot.fasta
.
Если требуется только первая строка 5000 newprot.fasta
, используйте:
sed -e '1,5000s/*//g;w newprot.fasta' -e '5000q' Jimbleprot.pep