Разбор каждого поля и обработка его с помощью awk / gawk - PullRequest
0 голосов
/ 22 февраля 2009

Вот запрос:

grep bar 'foo.txt' | awk '{print $3}'

Имя поля, генерируемого запросом 'awk', является искаженными именами символов C ++. Я хочу передать каждому из них dem и, наконец, вывести вывод 'dem' - то есть деформированные символы.

Предположим, что разделителем полей является '' (пробел).

Ответы [ 3 ]

3 голосов
/ 22 февраля 2009

awk - язык сопоставления с образцом. grep совершенно не нужно.

awk '/bar/{print $3}' foot.txt

делает то, что делает ваш пример.

Редактировать Исправлено немного после прочтения комментариев к предыдущему ответу (я ничего не знаю о dem ...):

Вы можете использовать system вызов в awk с чем-то вроде:

awk '/bar/{cline="dem " $3; system(cline)}' foot.txt

но это породит экземпляр dem для каждого обработанного символа. Очень неэффективно.

Итак, давайте станем умнее:

awk '/bar/{list = list " " $3;}END{cline="dem " list; system(cline)}' foot.txt

КСТАТИ - Не проверено, поскольку у меня нет dem или вашего ввода.


Еще одна мысль: если вы собираетесь использовать формулировку xargs, предлагаемую другими авторами, cut вполне может быть более эффективным, чем awk. Однако в этот момент вам снова понадобится grep.

1 голос
/ 22 февраля 2009

Это напечатает деформированные символы, дополненные списками аргументов в случае методов:

awk '/bar/ { print $3 }' foo.txt | xargs dem | sed -e 's:.* == ::'

Это напечатает деформированные символы, без списков аргументов для методов:

awk '/bar/ { print $3 }' foo.txt | xargs dem | sed -e 's:.* == \([^(]*\).*:\1:'

Ура, V.

1 голос
/ 22 февраля 2009

Как насчет

grep bar 'foo.txt' | awk '{ print $3 }' | xargs dem | awk '{ print $3 }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...