두 줄 사이에 빈 줄이 하나만 있으면 빈 줄을 삭제하고, 빈 줄이 두 개 있으면 빈 줄 하나만 삭제합니다.

두 줄 사이에 빈 줄이 하나만 있으면 빈 줄을 삭제하고, 빈 줄이 두 개 있으면 빈 줄 하나만 삭제합니다.

내가 얻는 db2 출력은 다음과 같습니다.

this    is    testing  1

this    is    testing   2


this    is      testing 4

db2는 쿼리의 출력으로 출력을 제공하고 쿼리에 데이터가 없는 경우 빈 행을 제공합니다.

각 출력 후에 추가 빈 줄을 제거하고 싶습니다.

sed -i '/^$/d' file.txt빈 줄을 제거하는 것이 가능하다는 것을 알고 있습니다 . 데이터가 포함된 각 행 다음에 빈 행 하나를 제거하는 방법이 있습니까?

원하는 출력은 다음과 같습니다.

this    is    testing  1
this    is    testing   2

this    is      testing 4

답변1

이는 특정 문자 뒤의 개행 문자만 제거합니다(텍스트 줄 뒤의 첫 번째 개행 문자만 제거).

 sed -n '$!N;s/\(.\)\n/\1/;P;D' file

답변2

파일이 메모리에 들어갈 만큼 작은 경우 다음 명령을 사용하여 파일을 삭제 perl하고 공백이 아닌 문자와 다른 줄 바꿈 뒤의 줄 바꿈을 제거할 수 있습니다.

$ perl -0pe 's/(\S\n)\n/$1/g' file 
this    is    testing  1
this    is    testing   2

this    is      testing 4

답변3

$ awk '{ print; if (length) getline }' file
this    is    testing  1
this    is    testing   2

this    is      testing 4

결과에 내용이 있으면 결과를 인쇄하고 그 뒤의 빈 줄을 읽습니다. 빈 결과의 경우 추가 행을 건너뛰지 않습니다.

여러 개의 연속된 빈 줄은 여러 개의 연속된 빈 결과가 있는 경우에만 인쇄됩니다. 결과당 한 줄만 출력합니다(비어 있거나 비어 있지 않음).

$ cat file
this    is    testing  1

this    is    testing   2



this    is      testing 5

$ awk '{ print; if (length) getline }' file
this    is    testing  1
this    is    testing   2


this    is      testing 5

답변4

Awk를 사용하면 레코드 구분 기호를 이중 개행 문자로 설정한 다음 기본 단일 개행 출력 레코드 구분 기호를 사용하여 각 레코드를 인쇄할 수 있습니다.

POSIX Awk를 사용하면 마지막 레코드 뒤에 추가 줄바꿈이 발생합니다. GNU Awk( gawk)가 있는 경우 실제 입력 레코드 구분 기호가 비어 있을 때 빈 출력 레코드 구분 기호를 설정하여 이를 방지할 수 있습니다.

$ gawk -vRS='\n\n' 'RT=="" {ORS=""} 1' file.txt
this    is    testing  1
this    is    testing   2

this    is      testing 4

관련 정보