특정 방식으로 형식을 지정해야 하는 파일이 있습니다. 파일의 레코드 형식은 다음과 같습니다.
Record
One
Record
Two
각 레코드는 빈 줄로 구분되며, 각 필드는 개행 문자로 구분됩니다. 다음 형식의 기록이 필요합니다.
Record:One
Record:Two
이것이 내가 지금까지 가지고 있는 것입니다.
#!/bin/bash
cat File.txt | awk '{ RS=""; FS="\n"; OFS=":"; ORS="\n" } {print $1,$2 }'
이 코드는 다음과 같은 출력을 제공합니다.
:ecord
:one
이것은 내가 찾고 있는 것과 가깝지 않습니다. 이 작업을 한 줄로 수행할 수 있습니까?
답변1
이 시도,
awk NF=NF RS="" FS="\n" OFS=":" ORS="\n" File.txt
Record:One
Record:Two
답변2
펄에서는:
perl -l -p -e 'BEGIN {$/=""; $\="\n\n"}; s/\n/:/mg' input
-l
Perl의 레코드 끝 자동 처리를 활성화합니다.-p
while ... print
각 레코드를 자동으로 읽고 처리한 다음 인쇄하도록 스크립트 주위에 암시적 루프를 배치합니다 (awk와 유사).입력 레코드 구분 기호(
$/
)를 공백으로 설정하면$/=""
Perl은 단락 모드(각 레코드를 구분하는 하나 이상의 빈 줄)에서 입력을 읽습니다.$\="\n\n"
레코드가 빈 줄로 구분되도록 출력 레코드 구분 기호를 두 개의 줄 바꿈으로 설정합니다.그런 다음 각 레코드의 모든 줄 바꿈을
:
.
이는 각 레코드의 필드 수에 관계없이 작동합니다. 레코드의 각 행은 별도의 필드입니다.
출력 예:
$ perl -lpe 'BEGIN {$/=""; $\="\n\n"}; s/\n/:/mg' input
Record:One
Record:Two
참고: 그 뒤에 빈 줄이 있습니다 Record:Two
.