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