![AWK - 새 줄 인쇄 내부의 "for 루프"](https://rvso.com/image/154449/AWK%20-%20%EC%83%88%20%EC%A4%84%20%EC%9D%B8%EC%87%84%20%EB%82%B4%EB%B6%80%EC%9D%98%20%22for%20%EB%A3%A8%ED%94%84%22.png)
"print" 안에 for 루프를 넣는 방법을 찾고 있습니다. 로그 파일에서 필요한 모든 정보를 얻는 방법을 관리했지만 인쇄 후에 "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열과 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" }'