Pipe grep result para awk com “:” como separador de campo

2

Eu gostaria de filtrar o resultado de um comando grep, por exemplo:

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

Se eu fizer o seguinte, funciona.

echo " myRepo/path/to/my/file.php:123: error_log(' - myError');" | awk -F': ' '{print $1}'

Mas quando é o resultado de um comando grep, sai a linha inteira, por quê?

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

Eu tenho o CentOS 6 com Awk 3.1.7, bash 4.1.2

    
por Bastien974 26.08.2016 / 18:08

2 respostas

1

Seu delimitador awk é um: e um espaço, mas eu suponho que seu código está usando a guia para recuo (e, portanto, não corresponde apenas a um espaço).

Você pode tentar mudar o seu grep para o seguinte (o que faz o awk corresponder: e o caractere de tabulação).

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

Isso funciona para mim usando o bash 4.3.46 e o awk 4.1.3 no slackware linux.

    
por 26.08.2016 / 18:19
1

Tente isto:

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

    
por 26.08.2016 / 18:39

Tags