.txt 파일의 내용을 여러 파일로 분할하고 싶지만 csplit 제한 사항과 관련하여 두 가지 문제가 발생합니다.
(1) 누구든지 csplit '99' 파일 분할 최대 제한을 해결할 수 있는 방법을 제공할 수 있습니까? 내 파일에는 반복되는 빈 줄이나 문자를 기준으로 최대 384개의 분할이 포함되어 있습니다. csplit이 {*}를 사용하여 이를 수용할 수 있었으면 좋겠지만 이는 csplit의 고유한 파일 생성 기능을 벗어납니다.
(2) 파일 내용을 csplit(파이프에서 csplit로)로 전달하는 방법을 아는 사람이 있습니까? 아니면 csplit을 파일을 호출하는 전통적인 방식으로만 사용할 수 있습니까? 즉csplit -f split_name file_to_split.txt /split/ {*}
[series of commands] | csplit -f split_name /split/ {*}
유사한 작업을 수행하기 위한 제안이나 대안을 제공해 주셔서 감사합니다.
답변1
마이클 호머가 말했듯이, 모든 POSIX 호환 csplit은 99개 이상의 파일을 가져올 수 있지만 이 -n
옵션을 전달해야 합니다.
csplit -n 3 file_to_split.txt
즉, GNU 버전의 csplit을 사용하여 쉽게 수행할 수 있지만 FreeBSD/OSX 버전을 사용하여 수행할 수 없는 작업이 있는 경우 GNU 버전(GNU coreutils의 일부)을 설치할 수 있습니다. GNU coreutils는 다양한 소스에서 설치할 수 있는데, 가장 인기 있는 소스는 다음과 같습니다.집에서 만든. 당신은 또한 볼 수 있습니다Mac OS X 유틸리티를 GNU 핵심 유틸리티로 바꾸는 방법은 무엇입니까?.
또는 csplit이 수행하는 작업의 대부분을 awk의 몇 줄로 구현할 수 있으므로 출력 파일 이름 등에 더 많은 유연성을 제공합니다. 다음 코드 조각은 표준 입력에서 읽고 행을 등에 씁니다. part-000.txt
행 part-001.txt
이 포함될 때마다 파일을 변경합니다 header-line
.
awk '
/header-line/ {
++part;
if (output_file) close(output_file);
output_file=sprintf("part-%03d.txt", part)
}
{print >output_file}
'