Исключая опции для AWK, отделяя breadXI от breadX - PullRequest
0 голосов
/ 19 сентября 2019

Я работаю со строками из файла .vcf, где хлеб указан от 1 до 20 римскими цифрами.Мне нужны только строки, соответствующие хлебу 10, поэтому я использовал

awk '/breadX/ {print}' file.vcf > Test.txt

, чтобы вывести список строк, содержащих «breadX», в Test.txt.Это все хорошо, но в список также входит «breadXI» и «breadXX».Есть ли возможность исключить случаи, которые не совпадают, если предположить, что «breadX» не в порядке и ближе к середине (XIV ... X ... XX), и что в строке есть больше информации.Я только хочу строки, которые начинаются с хлеба 10, а не любые другие варианты.Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

В отсутствие определенной выборки данных, чтобы увидеть, что может следовать за breadX, просто исключите все возможные строки, где следуют римские цифры I, V, X, L, D, M:

$ awk '/^breadX([^IVXLDM]|$)/' file

Пример тестового файла:

$ cat file
breadX
breadXI
breadX2
3

Проверьте это:

$ awk '/^breadX([^IVXLDM]|$)/' file

Вывод:

breadX
breadX2
0 голосов
/ 19 сентября 2019

Если breadX - это слово, вы можете использовать границу слова для ограничения поиска.

cat file
test breadXI more
hi breadX yes
cat home breadXX 

awk '/\<breadX\>/' file
hei breadX yes
  • \< начало слова
  • \> конец слова

PS вам не нужен print с момента его действия по умолчанию, если проверка верна.

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