forループを「印刷」に入れる方法を探しています。ログファイルから必要なすべての情報を取得できましたが、印刷後に「forループ」を使用すると、それぞれの新しい情報が表示されます。新しい行が与えられました。 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列と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
overにはデフォルトで提供されている文字列の後に改行文字が含まれているため、printf()
overを使用する必要があります。各文字列の書式指定子と連携するprint
ようにコードを変更します。printf
awk '{ printf "%s - %s %s ", $1, $4, $5 }
{ for(i=12; i<=NF; i++) printf "%s ", $i; printf "\n" }'