Primeiro de tudo, para executar awk
scripts, você precisa usar o interpretador awk
. Você pode fazê-lo diretamente na linha de comando ( awk '{print $2}' file
) ou pode criar um script awk. O que é necessário é de alguma forma trazer awk
para a equação. Você não pode usar o shell para executar comandos awk
, somente awk
pode fazer isso.
Neste caso, o script não é realmente necessário, como o Steeldriver mostrou, mas você também pode fazer o UNIX Way® e combinar ferramentas:
awk -F'[[ ]' '/hello.googlebot.com/{print $4}' log.txt | sed 's#:# #;s#/# #g'
Explicação
A opção -F
permite escolher o separador de campos, neste caso, estou dando a ela uma classe de caracteres que contém dois caracteres: [
e (espaço). Isso significa que
awk
será dividido nesses caracteres. Os campos resultantes serão:
1 : hello.googlebot.com
2 : -
3 :
4 : 10/December/2012:04:14:15
Por isso, imprimo o 4º campo e o passo sed
que apenas substitui o primeiro :
por um espaço ( s#:# #
) e todos /
com espaços ( todos por causa do g
em s#/# #g
).
Alternativamente, você poderia simplesmente mudar para perl
para a coisa toda:
perl -pe 's/.*?\[(.+?)\s\S+\].*/$1/; s/:/ /; s#/# #g' log.txt