구분 기호 사이의 텍스트를 여러 파일로 분할하는 방법은 무엇입니까?

구분 기호 사이의 텍스트를 여러 파일로 분할하는 방법은 무엇입니까?

다음 내용이 포함된 텍스트 파일이 있습니다.

"random
textA"
"random
random
textB"

구분 기호는 다음과 같습니다."

아래와 같이 bash 명령을 사용하여 포함을 여러 파일로 분할하는 방법은 무엇입니까?

파일 1:

random
textA

파일 2:

random
random
textB

csplit나는 예제를 사용했지만 awk이 텍스트 레이아웃을 다루지 않습니다.

답변1

간단한 awk명령:

awk 'NR%2==0{ print >("File " ++i) }' RS='"' infile

RS레코드 번호인 "레코드 구분 기호로 정의됩니다 . NR레코드 번호가 모듈로 2인 경우( "다른 레코드의 첫 번째 레코드가 있기 때문에) 현재 레코드를 $0에 인쇄합니다 File #.

답변2

다음과 같이 여는 따옴표가 항상 줄의 시작 부분에 있으면 csplit이 제대로 작동합니다.

bash$ csplit /tmp/data '/^"/'

그러면 xx00 등의 파일이 생성됩니다. 귀하의 예에서는 따옴표를 제거했지만 이 예에서는 따옴표를 제거하지 않았습니다. 이를 수행하려면 명령줄 sed가 필요합니다.

bash$ for file in xx* ; do { sed 's/^"//;s/"$//;' ${file} >x${file}; } ; done

답변3

GNU와 함께awk

awk -v RS='"[[:space:]]*"' '
{sub(/^"|"[[:space:]]*$/, "");print > "output." ++n; close("output." n)}' file.txt

답변4

넌 할 수있어:

awk -v RS=\" -v ORS= \
  '{ sub(/^\n*/,"");sub(/\n*$/,""); };
  /^\n*$/ { next;};
  { if(strcnt==0) { print $0 >"file1"; strcnt++;} else
  { print $0 >"file2"; }; }' file

관련 정보