awk를 사용하여 빈 줄을 레코드 구분 기호로 사용하고 개행 문자를 필드 구분 기호로 사용하는 방법은 무엇입니까?

awk를 사용하여 빈 줄을 레코드 구분 기호로 사용하고 개행 문자를 필드 구분 기호로 사용하는 방법은 무엇입니까?

특정 방식으로 형식을 지정해야 하는 파일이 있습니다. 파일의 레코드 형식은 다음과 같습니다.

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 
  • -lPerl의 레코드 끝 자동 처리를 활성화합니다.

  • -pwhile ... print각 레코드를 자동으로 읽고 처리한 다음 인쇄하도록 스크립트 주위에 암시적 루프를 배치합니다 (awk와 유사).

  • 입력 레코드 구분 기호( $/)를 공백으로 설정하면 $/=""Perl은 단락 모드(각 레코드를 구분하는 하나 이상의 빈 줄)에서 입력을 읽습니다.

  • $\="\n\n"레코드가 빈 줄로 구분되도록 출력 레코드 구분 기호를 두 개의 줄 바꿈으로 설정합니다.

  • 그런 다음 각 레코드의 모든 줄 바꿈을 :.

이는 각 레코드의 필드 수에 관계없이 작동합니다. 레코드의 각 행은 별도의 필드입니다.

출력 예:

$ perl -lpe 'BEGIN {$/=""; $\="\n\n"}; s/\n/:/mg' input 
Record:One

Record:Two

참고: 그 뒤에 빈 줄이 있습니다 Record:Two.

관련 정보