텍스트 파일의 중간 부분을 추출 하시겠습니까? 도달했습니다. 파일에는 약 16,000 줄이 있습니다.

데이터베이스 삽입을 위해 큰 텍스트 파일을 구문 분석하기 위해 PHP 스크립트를 작성 중입니다. 그러나 호스트에서 파일이 너무 커서 PHP의 메모리 제한에 도달했습니다.

파일에는 약 16,000 줄이 있습니다. 파일을로드 할 수 있는지 확인하기 위해 처음에는 4 개의 별도 파일로 나누고 싶습니다.

내가 얻을 수있는 첫 번째 부분 head -4000 file.txt. 중간 섹션은 약간 까다 롭습니다. tail출력을 head( tail -4001 file.txt | head -4000 > section2.txt) 에 파이핑하는 것에 대해 생각하고 있었지만 다른 방법이 있습니까?

실제로 내 논리가 엉망이됩니다. 섹션 2의 경우와 같은 것이 필요 하고 다음 섹션 tail -12001 file.txt | head - 4000tail인수를 낮추십시오 . 벌써 혼란 스러워요! :피



답변

엉망이되지 않고 여전히 tailand 을 사용하여 수행하려는 경우 끝이 아닌 처음부터 줄 수 headtail사용하여 호출하는 유용한 방법이 있습니다 .

tail -n +4001 yourfile | head -4000

…하지만 파일을 분할하기 위해 만들어진 더 나은 자동 도구는 … split! 또한 GNU coreutils의 일부이므로 일반적인 Linux 시스템에 있어야합니다. 사용 방법은 다음과 같습니다.

split -l 4000 yourInputFile thePrefixForOutputFiles

( man split의심이 있는지 보십시오 )


답변

머리와 꼬리를 결합하면 효과가 있지만 이것을 사용하려면 sed

sed -n '1,4000p' input_file # print lines 1-4000 of input_file

이를 통해 빠른 쉘 기능으로 문제를 해결할 수 있습니다

chunk_it(){
    step=4
    start=1
    end=$step
    for n in {1..4} ; do
        sed -n "${start},${end}p" "$1" > "$1".$start-$end
        let start+=$step
        let end+=$step
    done
}

chunk_it your_file

이제 your_file.1-4000 및 yuor_file.4001-8000 등이 있습니다.

참고 : bash가 필요합니다


답변