AWK - «цикл for» внутри новой строки print

AWK - «цикл for» внутри новой строки print

Я ищу, как поместить цикл for внутрь "print" - мне удалось получить всю необходимую мне информацию из файла журнала, но если я использую "цикл for" после print, то каждая новая информация будет выдаваться в новой строке. Я знаю, что это вызывает print каждый раз, так что... как напечатать все в новой строке? Например, это:

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

Дайте мне этот вывод:

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

Но когда я хочу передать в конце то, что я нашел между 12 col и NF:

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

Тогда я получаю только:

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

Я собираюсь вывести что-то вроде:

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

решение1

Вам нужно использовать printf()over, printпотому что последний по умолчанию встраивает новую строку после предоставленной строки. Измените свой код для использования printfс спецификаторами формата для каждой из строк.

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

Связанный контент