세 줄을 쉼표로 구분하여 하나로 병합하는 방법

세 줄을 쉼표로 구분하여 하나로 병합하는 방법

이 텍스트를 뒤집는 방법:

                                             From: "anonymous" <sip:[email protected]>;tag=1c1969267918
                                             Call-ID: [email protected]
                                             Max-Forwards: 70
                                             From: "anonymous" <sip:[email protected]>;tag=1c6447025742
                                             Call-ID: [email protected]
                                             Max-Forwards: 70

다음을 입력하세요:

From: "anonymous" <sip:[email protected]>;tag=1c1969267918, Call-ID: [email protected], Max-Forwards: 70
From: "anonymous" <sip:[email protected]>;tag=1c6447025742, Call-ID: [email protected], Max-Forwards: 70

답변1

예상 출력에서 ​​쉼표 뒤의 단일 공백이 중요하지 않은 경우:

$ sed 's/^[[:blank:]]*//' file | paste -d, - - -
From: "anonymous" <sip:[email protected]>;tag=1c1969267918,Call-ID: [email protected],Max-Forwards: 70
From: "anonymous" <sip:[email protected]>;tag=1c6447025742,Call-ID: [email protected],Max-Forwards: 70

먼저 sed입력 파일의 각 행에서 초기 공백을 제거하려면 를 사용하고, paste쉼표를 구분 기호로 사용하여 결과 행을 3개 열에 분산시킵니다.

답변2

그리고 awk:

awk '{sub(/^[[:blank:]]*/, ""); ORS = NR % 3 ? ", " : "\n"; print}' < your-file

답변3

쉘에서 이 작업을 수행하려면 다음을 수행하십시오.

n=0
while read x; do
    echo -n "$x"
    n=$((n+1))
    if [ $((n%3)) = 0 ]; then
        echo
    else
        echo -n ', '
    fi
 done < inputfile

이것은 한 줄씩 읽고 계산됩니다. 세 번째 줄( $((n%3))모듈러스를 계산하는 부분)마다 개행 문자를 출력하고, 그렇지 않으면 쉼표(예에서는 공백)를 출력합니다. 이렇게 하면 개행 문자 자체가 추가되는 것을 echo -n방지할 수 있습니다 .echo

답변4

나는 그것이 더 잘될 수 있다고 믿는다. 그러나 그것은 훌륭하게 작동합니다.

gnu sed: 첫 번째 표현식은 선행 공백을 제거합니다. 두 번째 표현식은 다음 줄을 연결하여 /From:/선행 공백을 일치시키고 제거합니다. 두 번째 표현식은 다음 줄을 연결하여 /Call-ID:/선행 공백을 일치시키고 제거합니다.

sed -e 's/^[[:blank:]]*//' \
    -e  '/From:/N;s/\n[[:blank:]]*/, /' \
    -e  '/Call-ID:/N;s/\n[[:blank:]]*/, /'

관련 정보