AWK: "bucle for" dentro de la impresión de una nueva línea

AWK: "bucle for" dentro de la impresión de una nueva línea

Estoy buscando cómo poner el bucle for dentro de "imprimir". He logrado obtener toda la información que necesito del archivo de registro, pero si uso el "bucle for" después de imprimir, cada nueva información se proporciona en una nueva línea. Sé que se llama imprimir cada vez, así que... ¿cómo imprimir todo en una nueva línea? Por ejemplo este:

cat /var/log/apache2/domlogs/xxxx/xxxx.com* | awk -F " " '{print $1 " - " $4 " " $5 " "} {for(i=12; i<=NF; i++) print $i}'

Dame esa salida:

66.249.65.172 - [29/May/2019:02:48:20 +0200]
"Mozilla/5.0
(compatible;
Googlebot/2.1;
+http://www.google.com/bot.html)"

Pero cuando quiero pasar al final lo que encontré entre 12 col y NF:

cat /var/log/apache2/domlogs/xxxx/xxxx.com* | awk -F " " '{print $1 " - " $4 " " $5 " " for(i=12; i<=NF; i++) " " $i}'

Entonces solo obtengo:

66.249.65.172 - [29/May/2019:02:48:20 +0200]

Me dirijo a una salida 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)"

Respuesta1

Debe utilizar printf()over printporque este último incorpora de forma predeterminada una nueva línea después de la cadena proporcionada. Modifique su código para usarlo printfcon especificadores de formato para cada una de las cadenas.

awk '{ printf "%s - %s  %s ", $1, $4, $5 } 
     { for(i=12; i<=NF; i++) printf "%s ", $i; printf "\n" }'

información relacionada