Назад | Перейти на главную страницу

Передать результат grep в awk с «:» в качестве разделителя полей

Я хотел бы отфильтровать результат команды grep, например:

myRepo/path/to/my/file.php:123:                             error_log(' - myError');

Если я сделаю следующее, это сработает.

echo "myRepo / path / to / my / file.php: 123: error_log ('- myError');" | awk -F ':' '{распечатать $ 1}'

Но когда это результат команды grep, она выводит всю строку, почему?

grep -rn "myError" | awk -F ':' '{распечатать $ 1}'

У меня CentOS 6 с Awk 3.1.7, bash 4.1.2

Попробуй это:

grep -rn "myError" | awk -F ': [\ t] *' '{напечатать $ 1}'

Ваш разделитель awk - это: и пробел, но я предполагаю, что ваш код использует табуляцию для отступа (и, следовательно, не соответствует только пробелу).

Вы можете попробовать изменить свой grep на следующий (что приводит к тому, что awk будет соответствовать: и символу табуляции).

grep -rn "myError"|awk -F':\t' '{ print $1 }'

У меня это работает с использованием bash 4.3.46 и awk 4.1.3 на slackware linux.