여러 줄을 단일 줄로 병합하려고하지만 추가 조건이 있습니다.
내 입력 파일은 다음과 같습니다.
Dm1*( stuff1 + stuff2 -
stuff3 + stuff4)
+ D1*(D1stuff1 + D1sstuff2 + D1stuff3 + D1stuff4 +
D1stuff5 -
D1stuff6 )
+ D2*(D2stuff)
따라서 빈 줄로 구분되는 여러 줄이 있습니다. 모두 *stuff*
괄호를 포함 할 수있는 길고 복잡한 표현식을 포함합니다.
예상 출력은 다음과 같습니다.
Dm1*( stuff1 + stuff2 - stuff3 + stuff4)
+ D1*(D1stuff1 + D1sstuff2 + D1stuff3 + D1stuff4 + D1stuff5 - D1stuff6 )
+ D2*(D2stuff)
현재의 모든 시도는
awk '{printf("%s",$0)}'
모든 것을 한 줄에 넣으십시오. 줄을 반복해야합니까, 아니면 빈 줄 사이의 블록을 식별하고 거기에 무언가를 적용하는 방법이 있습니까?
John1024 버전보다 조금 더 짧습니다.
awk 'BEGIN { RS=""; ORS="\n\n"}{$1=$1}1'
또는
awk -v RS="" -v ORS="\n\n" '{$1=$1}1'
using을 사용하면 RS=""
awk가 모든 단락을 레코드 (즉, 빈 줄로 구분 된 텍스트 블록)로 사용하도록 지시합니다. 그러나 그것은 또한 awk에게 <newline>이 항상 FS
. 출력 레코드 구분 기호 ORS
를 재정의하면 awk에게 $0
첫 번째 레코드를 재설정하여 레코드를 재정의하도록 지시하여 원하는대로 모든 것을 출력 할 수 있습니다 $1=$1
. 이는 FS
(여기서 기본값)로 정의 된 모든 필드 구분 기호 와 (로 인해 RS=""
) 줄 바꿈 이 OFS
(기본값 : <space;>) 로 대체되는 효과가 있습니다. 마지막으로 레코드를 인쇄합니다.1
추가로 설정하면 모든 공간을 없앨 수 있습니다. OFS=""
RS
문자열 값의 첫 번째 문자RS
는 입력 레코드 구분 기호입니다. 기본적으로 <newline>. 두RS
개 이상의 문자가 포함 된 경우 결과가 지정되지 않습니다. 경우RS
이며null
, 다음 기록은 선행 또는 빈 줄이 입력의 시작이나 끝 부분에 빈 레코드가 생성되지된다 후행하는 <개행 문자>를 구성 시퀀스 더하기 하나 이상의 공백 행으로 분리하고, <줄 바꿈> 항상한다 값이 무엇이든 상관없이 필드 구분자FS
입니다.출처 : POSIX awk 표준
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다