특정 텍스트로 시작하는 여러 줄을 한 줄로 요약하는 방법은 무엇입니까?
예를 들어:
P220002009034028180002 SSM 200903
P22200I2004220000 0408832000000000
P222500903200000015{
P22261000005500000
P22200I2008660000 8532818700000000
P22467809000033336{ P2298320000550000
P22230Y000003Va0 000000 0000000000 0000000000997 000000000000 Z N2
P22200I
으로 시작하는 줄을 확인한 후 다음 줄이 발견될 때까지 그 아래의 모든 후속 줄을 한 줄로 병합하려면 어떻게 해야 합니까 P22200I
? 이 "요약" 작업은 P22200I로 시작하는 행에서만 수행되어야 합니다.
출력은 다음과 같아야 합니다.
P220002009034028180002 SSM 200903
P22200I2004220000 0408832000000000 P222500903200015{
P22200I2008660000 85328187000026574 P224678090033336{ P22230Y000003Va0 000000
저는 리눅스를 사용하고 있습니다.
답변1
그리고 awk
:
awk 'BEGIN{ ORS="" }
FNR>1 && /^P22200I/{ printf "\n" }
1
END{ printf "\n" }
' file
출력 레코드 구분 기호를 빈 문자열(기본값 \n
)로 설정하고, 현재 줄이 첫 번째 줄이 아니고 줄이 시작되는 경우 개행 문자를 인쇄합니다 P22200I
. 그런 다음 현재 줄( 1
)을 인쇄합니다.
파일 끝에 도달하면 또 다른 줄 바꿈을 인쇄합니다.
산출:
P220002009034028180002 SSM 200903
P22200I2004220000 0408832000000000 P222500903200000015{ P22261000005500000
P22200I2008660000 8532818700000000 P22467809000033336{ P2298320000550000 P22230Y000003Va0 000000 0000000000 0000000000997 000000000000 Z N2