![awk를 사용하여 단일 빈 줄을 이중 빈 줄로 변경](https://linux55.com/image/111310/awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%8B%A8%EC%9D%BC%20%EB%B9%88%20%EC%A4%84%EC%9D%84%20%EC%9D%B4%EC%A4%91%20%EB%B9%88%20%EC%A4%84%EB%A1%9C%20%EB%B3%80%EA%B2%BD.png)
나는 읽었다암호awk를 사용하여 단일 빈 줄을 이중 빈 줄로 변경하려고 합니다. 그러나 이것은 나에게 효과가 없습니다.
awk ~NF<2{printf\~\n\~}{print}~ <contour.dat >contour1.dat
awk에 대한 튜토리얼을 읽은 후핵인자,이스케이프 시퀀스, 아직 이 코드에 대한 단서가 없습니다. awk를 사용한 것은 이번이 처음입니다.
나는 그것을 bash에서 실행하고 있습니다. 그것은 나에게 다음을 제공합니다:
-bash: 2{printf~n~}{print}~: No such file or directory
올바른 코드는 무엇이어야 합니까?
미리 감사드립니다.
내 거환경
GNU bash, 버전 3.2.51(1)-릴리스(x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc.
awk 버전 20070501
답변1
awk ~NF<2{printf\~\n\~}{print}~
쉘에서 명령을 실행하는 경우 이 물결표는 큰따옴표여야 합니다.
awk "NF<2{printf\"\n\"}{print}"
발생하는 오류는 쉘이 <
다음 부분을 리디렉션 연산자 및 파일 이름으로 처리하기 때문입니다.
또는 더 나은 방법은 awk 스크립트를 작은따옴표로 묶어서 따옴표를 이스케이프 처리할 필요가 없도록 하는 것입니다.
awk 'NF<2{printf"\n"}{print}'
두 개 미만의 필드가 있는 줄 앞에 추가 개행 문자가 인쇄됩니다. 그러나 이는 빈 줄과 동일하지 않습니다. 단어가 하나만 있는 줄에도 빈 줄이 추가됩니다.
필드가 정확히 0인지 확인해보세요.
awk 'NF == 0 {printf "\n"} {print}'
또는 행이 완전히 비어 있는 경우:
awk '$0 == "" {printf "\n"} {print}'
그러나 기본 작업은 to print $0
이고 빈 문자열은 false이고 printf "\n"
빈 줄과 거의 동일하므로 다음과 같이 요약할 수 있습니다.print
awk '!$0; 1'