[bash] 대형 텍스트 파일을 동일한 수의 줄이있는 더 작은 파일로 분할하는 방법?



3 Answers

split 명령은 어때?

split -l 200000 mybigfile.txt
Question

큰 파일 (줄 수에 따라)을 일반 텍스트 파일로 만들어 작은 파일로 나눌 수도 있고 줄 수로 나눌 수도 있습니다. 따라서 내 파일의 길이가 2M 줄 정도라면 200k 줄을 포함하는 10 개의 파일 또는 20k 줄을 포함하는 100 개의 파일 (나머지 파일과 함께 하나의 파일, 균등하게 나눌 수 있다는 것은 중요하지 않음)로 나누고 싶습니다.

나는 이것을 파이썬에서 상당히 쉽게 할 수 있었지만 bash와 유닉스 utils를 사용하여 이것을 수행하는 닌자 방법이 있는지 궁금하다. (수동 루핑과 카운팅 / 파티션 분할과는 대조적이다.)




단지 각 파일 x 줄의 수로 나누고 싶을 때, 분할에 관한 주어진 질문은 괜찮습니다. 그러나 아무도 asker의 요구 사항에주의를 기울이지 않는다는 것이 궁금합니다.

  • "whithout은 그들을 계산해야합니다"-> wc + cut 사용
  • "여분의 파일에 나머지가 있습니다"-> split는 기본적으로 않습니다.

나는 현재 그것을 사용하고있다 :

split -l  $(expr `wc $filename | cut -d ' ' -f3` / $chunks) $filename

이것은 bashrc 함수에 쉽게 추가 될 수 있으므로 파일 이름과 청크를 전달하여 호출 할 수 있습니다.

 split -l  $(expr `wc $1 | cut -d ' ' -f3` / $2) $1

단지 여분의 파일에 나머지가없는 x 덩어리를 원할 경우, 수식을 각 파일에 합쳐서 (청크 -1) 적용하십시오. 보통 파일 당 x 줄이 아닌 x 줄 수만 있기 때문에이 방법을 사용합니다.

split -l  $(expr `wc $1 | cut -d ' ' -f3` / $2 + `expr $2 - 1`) $1

이 스크립트를 스크립트에 추가하고 "ninja way"라고 부를 수 있습니다. 왜냐하면 아무 것도 사용자의 필요에 맞지 않으면 빌드 할 수 있기 때문입니다 :-)




awk도 사용할 수 있습니다.

awk -vc=1 'NR%200000==0{++c}{print $0 > c".txt"}' largefile



split 사용

파일을 고정 크기로 분할하고, INPUT의 연속 섹션을 포함하는 출력 파일을 만듭니다 (지정되지 않은 경우 표준 입력 또는 INPUT이 '-'임).

Syntax split [options] [INPUT [PREFIX]]

http://ss64.com/bash/split.html




Related



Tags

bash bash   file   unix