awk를 사용하여 단일 빈 줄을 이중 빈 줄로 변경

awk를 사용하여 단일 빈 줄을 이중 빈 줄로 변경

나는 읽었다암호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'

관련 정보