내가 얻는 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