AWK использовать пробел и вперед sla sh или запятую в качестве разделителя - PullRequest
1 голос
/ 28 апреля 2020

Я хочу, чтобы в awk было 2 разделителя, я знаю, что могу передать его следующим образом,

awk -F"=|/" '{print $1}'

Однако я пытаюсь передать 2 разделителя полей, т.е. пробел (по умолчанию fs) и вперед сла sh. Я хочу извлечь IP-адрес из строки ниже.

inet 10.190.120.13/24 brd 10.190.120.255 scope global prefixroute eth0

В настоящее время я использую 2 оператора awk с pipe, и я уверен, что будет лучший способ добиться этого.

awk '{print $2}' | awk -F"/" '{print $1}'

1 Ответ

1 голос
/ 28 апреля 2020

Давайте начнем с этого тестового файла:

$ cat file
inet 10.190.120.13/24 brd 10.190.120.255 scope global prefixroute eth0

Если вы хотите, чтобы пробел и sla sh были разделителем полей, попробуйте:

$ awk -F' |/' '{print $2}' file
10.190.120.13

Если есть возможность чтобы ваш ввод мог содержать как табуляцию, так и пробелы, попробуйте:

$ awk -F'[[:blank:]]|/' '{print $2}' file
10.190.120.13

В регулярных выражениях | означает или . Таким образом, |/ (с пробелом перед вертикальной чертой) означает пробел или a sla sh. Awk поддерживает регулярные выражения POSIX, и в POSIX [[:blank:]] будет соответствовать любой табуляции или пробелу.

В качестве альтернативы, мы можем поместить оба параметра в квадратные скобки, например:

$ awk -F'[[:blank:]/]' '{print $2}' file
10.190.120.13

Если вы, в соответствии с названием, вы хотите пробел или sla sh или запятую в качестве разделителя, попробуйте:

$ awk -F'[[:blank:]/,]' '{print $2}' file
10.190.120.13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...