2016-05-14 3 views
0

Я хочу найти шаблон, который является сложным, я уже узнал, что я должен указать \ | вместо | в сценарии, но как включить пробелы в соответствие с этим точным шаблоном.Как искать шаблон, включая пробелы в awk?

TR40663|c0_g1_i2|m.33339 TR40663|c0_g1_i2|g.33339 ORF TR40663|c0_g1_i2|g.33339 TR40663|c0_g1_i2|m.33339 type:5prime_partial len:1730 (+) TR40663\|c0_g1_i2:3-5192(+) [specie] 

Я должен использовать этот код, который извлекает последовательность, связанную с рисунком

awk 'BEGIN{RS=">";FS="\n"}NR>1{if ($1~/pattern) print ">"$0}' file 

Я не знаю, если ~/также баловаться с кодом. Позже я передам список элементов внутри нескольких файлов, но на данный момент я хочу сначала проверить этот шаблон/поиск.

Спасибо за помощь

+0

Почему бы не использовать grep? – stark

+0

@stark вы не можете использовать grep, потому что grep основан на линии, а не на основе записи, например awk, и поэтому вы не можете указать разделитель записей с grep для поиска и печати многострочных записей. Плакат использует '>' вместо новых строк для разделения записей. Андрес - '~ /' не является оператором. '~' является оператором и '/.../' являются статическими разграничителями regexp. Избавьтесь от '/' от '~ /', поскольку я уверен, что синтаксическая ошибка уже говорит вам об этом. –

+0

Пробел не имеет особого значения в шаблонах регулярных выражений, поэтому вам не нужно делать что-либо особенное для их включения. – Barmar

ответ

0

~/ не является оператором. ~ является оператором сравнения regexp и /.../ являются статическими регулярными выражениями. Избавьтесь от / от ~/, так как я уверен, что синтаксическая ошибка уже говорит вам об этом.

Синтаксис для использования dymamic регэкспы является:

awk -v re='foo \\| bar' '$0 ~ re' file 

или:

awk -v re='foo [|] bar' '$0 ~ re' file 

Никогда не используйте слово pattern, кстати, как это неоднозначное и вводит в заблуждение. В awk вы всегда должны использовать слова regexp или string, а оболочка использует globbing patterns, которые аналогичны регулярным выражениям в функциональности и синтаксисе, но очень различаются по семантике.

+0

Его код соответствует '$ 1', а не' $ 0'. – Barmar

+0

Да и его код использует '>' в качестве разделителя записей, а не '\ n'. Я уверен, что для динамического синтаксиса сравнения регулярных выражений он спрашивает о том, что он может решить все остальное. –

+0

Но как я могу включить пробелы? Я должен соответствовать этой точной строке, и если я верну ее дословно, она возвращает несколько записей, мне нужна только одна запись (это сама запись и какой-то текст или последовательность ниже), поэтому мне нужно сопоставить эту длинную строку с пробелами. Спасибо за вашу помощь. –

0

если pattern является переменнойAWK, который содержит строку, представляющую регулярное выражение, то вы должны написать

if ($1 ~ pattern) 

с ни в слэшах.

если pattern просто заполнитель в вашем вопросе для фактического регулярных выражений, то вы пропустили конечный слэш:

if ($1 ~ /pattern\|goes\|here/) 

Примечания:

  • ~/ не является оператором AWK
  • Оператор соответствия регулярному выражению: ~
  • Литеральные шаблоны регулярных выражений заключены в косые черты : /foo.*bar/
+0

Да, вы правы, я пропустил окончательный /, но я этот код отлично работал с такой линией {if ($ 1 ~/TR40663 \ | c0_g1_i2 \ | m.33339). Мой вопрос заключается в том, как добавить пробелы и избежать возврата нескольких совпадений. Мне нужно только одно совпадение, именно эта длинная строка, которая содержит много пробелов. –

+0

Если вы хотите именно эту строку, используйте равенство строк ('=='), а не соответствие шаблону. –

+0

Извините, что беспокою вас снова, я попробовал ($ 1 ==> TR10023 | c0_g1_i1 | m.6923 TR10023 | c0_g1_i1 | g.6923 ORF TR10023 | c0_g1_i1 | g.6923 TR10023 | c0_g1_i1 | m.6923 тип: полная длина: 176 (-) TR10023 | c0_g1_i1: 452-979 (-) [name]), а также эту строку между «», но я не смог найти совпадение, которое я должен уточнить. Я вставил точную строку, которую я хотел найти, я тестирую ее с меньшим пример и с помощью gedit, чтобы проверить его дважды. - –

Смежные вопросы