AWK - 새 줄 인쇄 내부의 "for 루프"

AWK - 새 줄 인쇄 내부의 "for 루프"

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

관련 정보