Найти строку, затем вывести то, что будет дальше, до следующей строки - PullRequest
0 голосов
/ 17 ноября 2018

Вот мои input.file (тысячи строк):

FN545816.1  EMBL    CDS 9450    9857    .   +   0   ID=cds-CBE01461.1;Parent=gene-CDR20291_3551;Dbxref=EnsemblGenomes-Gn:CDR20291_3551,EnsemblGenomes-Tr:CBE01461,GOA:C9YHF8,InterPro:IPR003594,UniProtKB/TrEMBL:C9YHF8,NCBI_GP:CBE01461.1;Name=CBE01461.1;gbkey=CDS;gene=rsbW;product=anti-sigma-B factor (serine-protein kinase);protein_id=CBE01461.1;transl_table=11

Я хочу извлечь только то, что идет после product= до следующего ; Итак, в этом случае я хочуполучить «фактор анти-сигма-В (серин-протеинкиназа)»

Я пробовал это:

awk '{for(i=1; i<=NF; i++) if($i~/*product=/) print $(i+1)}' input.file > output.file 

, но он печатает только «фактор» (предположительно, потому что между ними нет места)product = "and" anti-sigma-B ". Остальное тоже не печатается.

Я пробовал много предыдущих решений, но ни одно не дало того, что я хочу.

Спасибо.

1 Ответ

0 голосов
/ 17 ноября 2018

Не могли бы вы попробовать следующее.

awk 'match($0,/product=[^;]*/){print substr($0,RSTART+8,RLENGTH-8)}' Input_file

Объяснение: Добавление пояснения к вышеуказанному коду тоже сейчас.

awk '                                           ##Starting awk program here.
match($0,/product=[^;]*/){                      ##Using match function for awk here, where giving REGEX to match from string product= till first occurrence of ;
  print substr($0,RSTART+8,RLENGTH-8)           ##Printing substring whose value is from RSTART+8 to till RLENGTH-8, where RSTART and RLENGTH are out of the box keywords which will be set once REGEX condition is satisfied. RSTART mean starting point of regex and RLENGTH is length of REGEX matched.
}'  Input_file                                  ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...