GNU awk가 예상대로 작동하지 않습니다

GNU awk가 예상대로 작동하지 않습니다

나는 ".awk" 파일을 사용해야 하는 awk 튜토리얼을 따르고 있습니다. awk가 예상대로 작동하지 않아서 사용하는 데 문제가 있습니다. 이것이 내가 사용하는 코드입니다. virt.awk 파일의 내용

BEGIN { RS="\n\n" ; }
$0 ~ search { print }

이제 예상되는 결과는 패턴을 검색하면 특정 기록이 표시된다는 것입니다. 하지만 다음을 시도하면 전체 파일이 표시됩니다.

내가 사용하는 명령은 다음과 같습니다.

awk -f virt.awk search=domain1 virtualhosts.conf

검색어에 무엇을 사용하든 전체 파일을 인쇄합니다. 도메인 1, 도메인 2, 도메인 3 등에 대한 모든 항목. 누구든지 도와줄 수 있나요?

참고: 이는 virtualhosts.conf 파일의 복사본일 뿐이며 정확히 동일한 형식으로 미리 형식화되어 있습니다. 즉, 각 항목 뒤에는 빈 줄이 있고 그 사이에는 다른 빈 줄이 없습니다.

virtualhost.conf의 내용: (그리고 항상 얻는 결과):

<VirtualHost 172.20.30.40:80>
DocumentRoot "/www/domain1"
ServerName www.domain1.com
#Other options
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
DocumentRoot "/www/domain2"
ServerName www.domain2.com
#Other options
</VirtualHost>

<VirtualHost 172.20.30.50:80>
DocumentRoot "/www/domain3-80"
ServerName www.domian3.org
#Other options
</VirtualHost>

<VirtualHost 172.20.30.50:8080>
DocumentRoot "/www/example2-8080"
ServerName www.example.org
#Other options
</VirtualHost>

추가 세부사항: mawk를 사용하고 있다는 사실을 발견하고 gawk를 설치했지만 여전히 동일한 결과를 얻었습니다. 나는 pop-os 20.04와 dash btw를 사용하고 있습니다 (이것이 영향을 미치는 경우)

user@pop-os:~/linuxwork$ which awk
/usr/bin/awk
user@pop-os:~/linuxwork$ ll /usr/bin/awk
lrwxrwxrwx 1 root root 21 Mar 30 21:10 /usr/bin/awk -> /etc/alternatives/awk*
user@pop-os:~/linuxwork$ ll /etc/alternatives/awk
lrwxrwxrwx 1 root root 13 Aug  6 20:21 /etc/alternatives/awk -> /usr/bin/gawk*
user@pop-os:~/linuxwork$

답변1

\n\n파일에 s가 없고 모두 s가 있으므로 입력 파일에 DOS 줄 끝이 있는 것이 거의 확실합니다 \r\n\r\n. 또는 (모든 awks에 이식 가능하도록 실제로 사용해야 하는 것) RS="\n\n"로 변경하고 얻은 출력을 확인하십시오.RS=""RS="\r\n\r\n"RS="\r?\n\r?\n"

또한 각 줄의 끝에 cat -Ev virtualhost.conf캐리지 리턴(==)과 줄 바꿈(==)이 오는 것을 나타내는 항목을 실행하여 찾을 수도 있습니다.^M$CR\r^MLF\n$

바라보다내 도구 출력이 자체적으로 덮어쓰이는 이유와 해결 방법DOS 줄 끝 및 해당 파일에 대해 Unix 도구를 실행하려는 경우 이를 해결하는 방법에 대한 자세한 정보.

관련 정보