поиск шаблона в файле - PullRequest
1 голос
/ 17 июня 2011

У меня есть текстовый файл из 500 строк и одного столбца.

Столбец в каждой строке выглядит примерно так (например, я вставляю две строки):

chr22:49367820-49368570_NR_021492_LOC100144603,chr22:49368010-49368760_NM_005198_CHKB,chr22:49368010-49368760_NM_152247_CPT1B,chr22:49368010-49368760_NM_152253_CHKB    

chr22:49367820-49368570_NR_021492_LOC100144603,chr22:49368010-49368760_NM_005198_CHKB

Я хочу извлечь из каждой строки значения, начинающиеся с NM_ или NR_, например

  • строка 1 имеет NR_021492 NM_005198 NM_152247 NM_152253
  • строка 2 имеет NR_021492 NM_005198
  • ...

в файле с разделителями табуляции

какие-либо предложения для командной строки bash?

Ответы [ 4 ]

2 голосов
/ 17 июня 2011

Попробуйте:

 sed -r -e 's/chr[0-9]+:[^_]*_(N[RM])_([0-9]+)_[^,_]+([, ]|$)/\1_\2'$'\t''/g;s/'$'\t''$//g'

Предполагается, что GNU sed.

So

sed -r -e 's/chr[0-9]+:[^_]*_(N[RM])_([0-9]+)_[^,_]+([, ]|$)/\1_\2'$'\t''/g;s/'$'\t''$//g' your_file > tab_delimited_file

РЕДАКТИРОВАТЬ: Обновлено, чтобы не оставлять символы табуляции в каждой строке.

РЕДАКТИРОВАТЬ 2: снова обновлено, чтобы работать для любой последовательности chr-then-number.

2 голосов
/ 17 июня 2011
grep "NM" yourfiname | cut -d_ -f3 | sed 's/[/\d]*/NM_/'
grep "NR" yourfiname | cut -d_ -f3 | sed 's/[/\d]*/NR_/'
1 голос
/ 17 июня 2011
awk -F '[,:_-]' '{
    for (i=1; i<NF; i++) 
        if ($i == "NR" || $i == "NM") 
            printf("%s_%s ", $i, $(i+1))
    print ""
}'

Это также будет работать, но каждый матч будет печататься в отдельной строке: egrep -o 'N[RM]_[0-9]+

1 голос
/ 17 июня 2011
cat file|sed s/$.*!(NR)//;

Используйте регулярное выражение, чтобы удалить все до NR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...