#linux #grep
#linux #grep
Вопрос:
Я работаю в области биоинформатики, и мне нужно подсчитывать шаблоны, такие как GATTACCA, в больших файлах, которые выглядят примерно так:
«ATTTCCCGATCCGAG GATT (/ n)
ACCA CGTAGATGATACACGT (etc)» Есть ли способ заставить Grep игнорировать символ новой строки /n? Спасибо за любую помощь!
Комментарии:
1. вам просто нужно количество
GATTnACCA
вхождений? и насколько велик файл?2. Насколько велики файлы? Во-вторых — grep распознает по новой строке, поэтому не может ее сопоставить. Но вы можете использовать «tr» для замены символа новой строки пробелом, но опять же, насколько велики файлы?
Ответ №1:
Я думаю, это может сделать то, что вы хотите:
tr -d 'n' < file | grep -o GATTACCA
Он (временно) удаляет переводы строк из вашего файла (используя tr
и его -d
опцию для удаления) перед передачей в grep
.
Комментарии:
1. Спасибо! пока это работает проще всего … сейчас… Есть идеи, как разобрать его на python? Я знаю, как использовать простые команды Linux в python, но не знаю, как передавать…
Ответ №2:
Использование sed
и grep
:
sed -n 'H;x;s/n//g;/GATTACCA/p' input | grep -o GATTACCA
Комментарии:
1. Почему
grep
? Вашаsed
команда уже выполняет свою работу. Я что-то упускаю?2. шаблон может встречаться несколько раз.
Ответ №3:
Вы можете сделать это с помощью awk и grep, чтобы подсчитать количество вхождений слова GATTACCA
в ваш файл,
awk -v RS="" '{gsub (/n/,""); print}' file | grep -o 'GATTACCA' | wc -l
Объяснение:
RS="" # Turns the input file into a single record.
gsub (/n/,"") # Removes all the n character.
grep -o 'GATTACCA' # From the awk output, it fetches the string GATTACCA and prints every match in a new line.
wc -l # To count the number of lines
Комментарии:
1. Вы можете использовать
grep -c
для подсчета вместоwc
.2. @terdon он отображает другой результат.
3. Мне нужно количество вхождений, а не количество строк… так что -c, вероятно, было бы лучше?
4. Он отображает количество вхождений. вы пробовали это? Вы можете проверить выходной mycode с другими.
Ответ №4:
У вас уже есть два хороших общих ответа. Другой подход заключается в использовании sed
:
perl -pe 's/n//' file | grep -o GATACA
Однако, если вы работаете с файлами fasta, это может быть интересно:
#! /bin/sh
gawk '{
if (substr($1,1,1)==">")
if (NR>1)
printf "n%st", substr($0,2,length($0)-1)
else
printf "%st", substr($0,2,length($0)-1)
else
printf "%s", $0
}END{printf "n"}' "$@"
Приведенный выше сценарий изменяет формат fasta на tbl (seq IDsequence, все в одной строке). Я очень часто использую его для grepping:
FastaToTbl foo.fa | grep GATTACA
У меня также есть TblToFasta для восстановления оригинала:
#! /bin/sh
# tbl-to-fasta.awk transforms a tbl file into a fasta file, 60 columns per record
# usage=gawk -f tbl-to-fasta TBL_FILE
gawk '{
sequence=$NF
ls = length(sequence)
is = 1
fld = 1
while (fld < NF)
{
if (fld == 1){printf ">"}
printf "%s " , $fld
if (fld == NF-1)
{
printf "n"
}
fld = fld 1
}
while (is <= ls)
{
printf "%sn", substr(sequence,is,60)
is=is 60
}
}' "$@"