"^ Обратный слэш не последний символ в строке" в gawk

Я хотел бы совместить число между / и , в каждой строке, и увеличить его на 3. Например

Вездесущий обратный скепс / 49, черный

становится

Вездесущий обратный слэш / 52, черный

Моя команда gawk:

 $ gawk '{b=gensub(/\/([0-9]+),/, "/" (\\1+3) ",") ; print b}' add.jpdf gawk: cmd. line:1: ^ backslash not last character on line 

Мне было интересно, что означает «обратная косая черта не последний символ на линии»? Какое правило синтаксиса gawk нарушает мое решение?

Благодарю.

One Solution collect form web for “"^ Обратный слэш не последний символ в строке" в gawk”

gensub() ожидает строку как второй аргумент. Вы пытаетесь объединить / и вокруг выражения (\\1+3) которое, по вашему мнению, будет оцениваться функцией. Я не буду. Он вычисляется перед вызовом функции. Вы используете \1 для ссылки на соответствующую группу захвата () в regexp, но вы можете использовать ее только в строке, а не в выражении.

Поэтому в лучшем случае вы можете использовать в качестве второго аргумента "/\\1+3," , но затем получите результат ...Backslash/49+3,Black . Таким образом, вы не можете оценить часть 49 + 3.

Если вы хотите сделать арифметику в матче, вы должны сначала извлечь строку, выполнить арифметику, а затем поместить ее обратно в строку. Например,

 awk '{ n = split($0, d, /\/([0-9]+),/, s) print d[1] "/"(substr(s[1],2)+3)"," d[2] }' 

Это использует функцию split() gnu awk с regexp, чтобы разделить строку на 3 части: часть перед совпадением в d[1] , часть после совпадения в d[2] и совпадающая строка "/49," в s [1]. Вы действительно должны проверить, что n равно 2, чтобы вы получили ровно одно совпадение.

Затем вы можете извлечь номер из согласованной строки, просто пропустив начальную "/" , выполните арифметику и соедините все части вместе снова.


Если шаблон может появляться несколько раз в одной строке ваших данных, лучшим решением является использование match() чтобы найти только последнее вхождение и вырезать строку, используя substr() :

 awk '{ match($0, /.*\/([0-9]+),/, m) a = m[1,"start"] b = m[1,"length"] if(a)print substr($0,1,a-1) substr($0,a,b)+3 substr($0,a+b) else print }' 

Здесь шаблон имеет .* Добавлен спереди, чтобы соответствовать только последнему вступлению. a задается позиция символа начала группы захвата () в регулярном выражении, а b – ее длина, поэтому substr($0,a,b) – это просто число. Окончательная линия повторно собрана из двух других частей исходных данных.

  • Как подключить сортировку к gawk?
  • Файл анализа с Awk только в том случае, если первая строка соответствует шаблону
  • awk для обработки строк с нулями по столбцам
  • Как получить последнее вхождение строк между двумя шаблонами из файла?
  • gawk: Суммирующие поплавки, отформатированные с помощью разделителя запятой
  • Как изменить только последнюю строку (или любые конкретные номера строк) с помощью команды awk?
  • Как заменить последнее совпадение на строку
  • Извлечение информации о трассировке с помощью gawk
  • Добавить строку в файл конфигурации из сценария bash?
  • awk найти строки с двумя совпадениями
  • Замените одно поле другим, если его запись начинается с определенной буквы
  • Создание и экспорт / импорт переменной с awk?
  • Interesting Posts

    Открытие приложений на другом рабочем столе из командной строки

    Заменить числа в первом разделе файла в результате расчета

    как совместить все между строкой и перед следующим пространством

    cat / dev / ttyS0 Ошибка ввода / вывода

    Создайте нового пользователя без подсказки с chpasswd

    Формат файла агностического языка

    Связывание двух широкополосных соединений для обслуживания LAN в качестве шлюза

    Как сделать запись рабочего стола pcmanfm правой кнопкой мыши только для папки «Рабочий стол»?

    mv * (исключение ошибки «can not move»)

    ext4 & jbd2 грязные метаданные

    Встроенный сканер Brother DCP-110c не работает в Mint (18,1 x 64)

    Как полностью разблокировать команду оболочки, которая использует перенаправление

    Означает ли GPL, что все программное обеспечение является общедоступным?

    Когда строки файла или каталога становятся слишком длинными, перейдите в формат списка ls?

    Оптимальная настройка для Windows и Linux – совместное использование и разделение

    Linux и Unix - лучшая ОС в мире.