Intereting Posts
GTK2, GTK3 или QT для оптимизированного приложения LXDE Удалите учетную запись пользователя ex-admin и предоставите привилегии / разрешения / право собственности другому Запуск демона как непривилегированного пользователя Сделать gVim использовать последнюю скомпилированную версию vim Перекрестные запросы от VLAN в dnsmasq Ошибка журнала для dnsmasq на osx с помощью newsyslog Выход VIM медленный, обычно 2 секунды, он показывает Что-то вроде VMware «Changed Block Tracking» (CBT) в Linux Как добавить приложение в раздел «Избранное» в меню «Приложения» в CentOS 7? Рекомендации по отслеживанию работы и процессов и многозадачности Игнорировать все совпадения для отрицательного шаблона extglob в рекурсивном ls Ext4 демонстрирует неожиданную дисперсию латентности записи по сравнению с ext2 Как создать маршрутизатор для беспроводных сетей? Приложение для голосового чата в Интернете Посвятите некоторую память определенной программе

Как я могу сопоставить строку, когда ей не предшествует цифра с помощью awk?

У меня есть файл, где второй столбец выглядит следующим образом:

37M533N38M 14M1170N45M233N16M 3S45M3N35M 

Я хочу извлечь те строки, которые содержат 3N но не другие числа непосредственно перед 3 . Так, например, A3N будет соответствовать, но 23N не будет. Следует также отметить, что 3N никогда не будет присутствовать один, и строка не начнется с 3N и не закончится 3N . Результатом должна быть третья строка из вышесказанного:

 3S45M3N35M 

Как я могу сделать это в awk? Я пробовал $2 ~ /3N/ но это, безусловно, не работает.

Вы можете использовать отрицательный класс символов: [^0-9] означает «любой символ, кроме цифры»:

 awk '$2~/[^0-9]+3N/' file 

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

 awk '$2~/(^|[^0-9])3N/' file 

Если вы хотите только напечатать второе поле, а не всю строку, используйте:

 awk '$2~/[^0-9]3N/{print $2}' file 

или

 awk '$2~/(^|[^0-9])3N/{print $2}' file 

Использование grep:

 grep [^0-9][3][N] file 

v – показать те, которые не соответствуют / инвертируют соответствие

[0-9] [3] [N] – шаблон, чтобы найти 3N с положительным целым числом, предшествующим.