Perl에서 n번째 구분 기호 인스턴스마다 줄 바꿈을 추가하는 방법

Perl에서 n번째 구분 기호 인스턴스마다 줄 바꿈을 추가하는 방법

나는 data.txt 파일을 열고 "|"의 n 인스턴스마다 개행 구분 기호를 추가하여 각 줄에 4개의 변수가 모두 포함되도록 하는 스크립트를 작성하고 있습니다. 기본적으로 선을 넓은 것에서 긴 것으로 분할하고 모양을 변경합니다. 당신의 도움을 주셔서 감사합니다.

입력하다:

a1|b1|c1|d1|a2|b2|c2|d2|a3|b3|c3|d3|a4|b4|c4|d4

산출:

a1|b1|c1|d1|   
a2|b2|c2|d2|   
a3|b3|c3|d3|  
a4|b4|c4|d4

답변1

다음을 수행할 수 있습니다.

perl -pe 's/(.*?\|){4}\K/\n/g'

답변2

Sed 사용:

가지고 다닐 수 있는:

sed -e 's/|/&\
/4;P;D' file

GNU Sed를 사용하는 경우 대체 패턴에서 비표준 \n개행 표현을 사용할 수 있습니다.

sed -e 's/|/&\n/4;P;D' file

이 명령은 패턴 공간에서 s네 번째 문자 뒤에 개행 문자를 삽입합니다 .|

P명령은 패턴 공간의 첫 번째 개행 문자를 인쇄합니다.

D명령은 패턴 공간에서 최대 첫 번째 개행 문자를 제거합니다.

대체가 이루어지지 않으면( |패턴 공간에서 4자 미만) 패턴 공간에는 개행 문자가 포함되지 않으므로 명령 P이 인쇄됩니다.모두패턴 공간인 경우 이 D명령은 전체 패턴 공간을 삭제한 다음 파일의 다음 줄을 읽고 루프를 다시 시작합니다.

답변3

정확한 출력 대신 tr 및 붙여 넣기

tr '|' '\n' <file | paste -d'|' - - - -
a1|b1|c1|d1
a2|b2|c2|d2
a3|b3|c3|d3
a4|b4|c4|d4

awk -F'|' -v OFS='|' -v n=4 '{for (i=n+1; i<=NF; i+=n) $i = "\n" $i; print}' file
a1|b1|c1|d1|
a2|b2|c2|d2|
a3|b3|c3|d3|
a4|b4|c4|d4

관련 정보