AWK - 新行打印内的“for 循环”

AWK - 新行打印内的“for 循环”

我正在搜索如何将 for 循环放入“print”中 - 我已经设法从日志文件中获取我需要的所有信息,但如果我在 print 后使用“for 循环”,则每个新信息都会在新行中给出。我知道每次都会调用打印,所以...如何在新行中打印所有内容?例如这个:

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" }'

相关内容