Estou pesquisando como colocar loop for dentro de "print" - consegui obter todas as informações que preciso do arquivo de log, mas se eu usar "for loop" após imprimir, cada nova informação será fornecida em uma nova linha. Eu sei que está chamando print toda vez então... como imprimir tudo em nova linha? Por exemplo isso:
cat /var/log/apache2/domlogs/xxxx/xxxx.com* | awk -F " " '{print $1 " - " $4 " " $5 " "} {for(i=12; i<=NF; i++) print $i}'
Dê-me essa saída:
66.249.65.172 - [29/May/2019:02:48:20 +0200]
"Mozilla/5.0
(compatible;
Googlebot/2.1;
+http://www.google.com/bot.html)"
Mas quando quero passar no final o que encontrei entre 12 col e NF:
cat /var/log/apache2/domlogs/xxxx/xxxx.com* | awk -F " " '{print $1 " - " $4 " " $5 " " for(i=12; i<=NF; i++) " " $i}'
Então eu recebo apenas:
66.249.65.172 - [29/May/2019:02:48:20 +0200]
Estou indo para saída como:
66.249.65.172 - [29/May/2019:02:48:20 +0200] "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Você precisa usar
printf()
overprint
porque o último, por padrão, incorpora uma nova linha após a string fornecida. Modifique seu código para usarprintf
com especificadores de formato para cada uma das strings.