Как использовать regex в качестве разделителя полей в awk?

Необходимо проверить checkinstall. Вместо

./configure
make
sudo make install

Вы делаете

./configure
make
sudo make checkinstall

и Вы сможете управлять тем пакетом, как будто Вы установили его через Кв.

16
08.10.2011, 22:23
2 ответа

Вы испачкали свои кавычки и синтаксис. Для установки разделителя поля ввода самый легкий способ сделать это с -F опция на командной строке:

awk -F '[0-9]' '{ print $1 }'

или

awk -F '[[:digit:]]' '{ print $1 }'

Это использовало бы любую цифру в качестве разделителя поля ввода и затем произвело бы первое поле от каждой строки.

[0-9] и [[:digit:]] выражения являются не совсем тем же, в зависимости от Вашей локали. См. "Различие между [0-9], [[: цифра:]] и \d".

Можно было также установить FS в awk сама программа. Это обычно делается в a BEGIN блок, поскольку это - одноразовая инициализация:

awk 'BEGIN { FS = "[0-9]" } { print $1 }'

Обратите внимание, что одинарные кавычки не могут использоваться в единственно заключенной в кавычки строке в оболочке, и что awk строки всегда используют двойные кавычки.

25
27.01.2020, 19:48

+1 для ответа Kusalananda. Поочередно, переменная FS может быть установлена в НАЧАТЬ блоке:

awk 'BEGIN {FS="[0-9]"} {print $1}'

Изменение FS в блоке действия не вступит в силу, пока следующая строка не читается

$ printf "%s\n" "abc123 def456" "ghi789 jkl0" | awk '{FS="[0-9]"; print $1}'
abc123
ghi

Другие ошибки в вопросе:

  • не может использовать одинарные кавычки в единственно заключенной в кавычки строке
  • == оператор сравнения, = для переменного присвоения
12
27.01.2020, 19:48
  • 1
    "Изменяющийся FS в блоке действия не вступит в силу, пока следующая строка не читается", я смотрел на всем протяжении для той информации –  Samizdis 26.06.2017, 18:50

Теги

Похожие вопросы