2017-12-05 17 views
0

아래 형식의 데이터가 텍스트 파일에 있습니다.존재하는 경우 행을 병합하십시오. 쉘 스크립트

desc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana 
gement 
ldesc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man 
agement (BCD-WQ-UIO, BCD-WQ-BN) 
date       : 

아래 출력 형식으로 출력하려고합니다.

desc       : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management 
ldesc       : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management (BCD-WQ-UIO, BCD-WQ-BN) 

기본적으로 내가 삭제해야 결장하지만 콜론 다음 아무것도이있는 행을 원하고 어떤 행이 콜론이없는 경우는 공간이있는 경우를 포함하여 이전 행과 통합되어야한다.

awk를 사용해 보았지만 계속할 수 없습니다.

감사합니다.

+0

병합 할 수있는 행은 3 개가 될 수 있습니까? if awk/: $/{next} {ORS =/: /? "": "\ n"} 1 '파일'이 작동하지 않습니다. 그러면 더 나은 입력 샘플을 제공하는 것을 고려하십시오. – Sundeep

답변

0

이전 라인에 선을 병합하려면, 당신은 개행 문자를 인쇄하지 않도록해야합니다. 파일의 끝에 도달했을 때 마지막 줄 바꿈을 인쇄하는 것을 잊지 마라!

awk '/:./ { printf "%s", $0; pending=1; next } 
    /:$/ { if (pending) printf "\n"; pending=0; next } 
    pending { printf "%s\n", $0; pending=0 } 
    END { if (pending) printf "\n" }' file 
+0

안녕하세요,이 문제는 모든 새 줄을 제거한다는 것입니다. 따라서 모든 데이터는 한 줄로 구성됩니다. – user2854333

+0

질문에서 테스트 데이터와 함께 작동하는 것처럼 보였습니다. 당신이 묘사하고있는 것을 보여주는 데이터를 보여줄 수 있습니까? – tripleee

+0

사실, 나는 틀린 하나의 코너 케이스를 발견했으며, 그에 따라 지금 코드를 업데이트했습니다. 미안합니다. – tripleee

0

은 파일 이름 가정 exp1.txt

awk -F: 'length($2) { print $0 }' exp1.txt 

당신은 당신이 결과를 기대하고있어 것입니다!

내 출력 : 병합 여부를 알 때까지

(public)landpacks-MacBook-Pro:stackoverflow frank$ cat exp1.txt 
desc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana 
gement 
ldesc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man 
agement (BCD-WQ-UIO, BCD-WQ-BN) 
date       : 
(public)landpacks-MacBook-Pro:stackoverflow frank$ awk -F: 'length($2) { print $0 }' exp1.txt 
desc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana 
ldesc   : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man 
(public)landpacks-MacBook-Pro:stackoverflow frank$ 
+0

작동하지 않습니다. 나는 데이터가 명확하지 않을 수 있습니다. 데이터를 다시 수정했습니다. – user2854333

+0

@ user2854333 이미 답변을 업데이트하십시오! –

+0

도움을 주셔서 감사합니다. – user2854333