Как я могу избежать всех не алфавитно-цифровых символов в AWK? - PullRequest
1 голос
/ 26 апреля 2019

Я унаследовал очень большой сценарий AWK, который соответствует файлам .csv, и обнаружил, что он не соответствует некоторым буквенно-цифровым символам, особенно + ( ).

Хотя я понимаю, что это будет легко в sed:

sed 's/\([^A-z0-9]\)/\\\1/g'

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

Например, пример ввода:

select.awk 'Patient data +(B/U)'

Я хотел бы экранировать не алфавитно-цифровые символы и преобразовать строку в:

Patient\ data\ \+\(B\/U\)

Я видел, как некоторые люди также передавали очень неясные не буквенно-цифровые символы, от которых я хотел бы избежать.

Ответы [ 2 ]

4 голосов
/ 26 апреля 2019
gsub(/[^[:alnum:]]/, "\\\\&", arg)
0 голосов
/ 27 апреля 2019

вариант GNU имеет больше возможностей,

awk '{n=gensub(/[^[:alnum:]]/,"\\\\&","g"); print n}' d.csv 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...