다음 내용이 포함된 텍스트 파일이 있습니다.
"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