데이터베이스 삽입을 위해 큰 텍스트 파일을 구문 분석하기 위해 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 - 4000
의 tail
인수를 낮추십시오 . 벌써 혼란 스러워요! :피
답변
엉망이되지 않고 여전히 tail
and 을 사용하여 수행하려는 경우 끝이 아닌 처음부터 줄 수 head
를 tail
사용하여 호출하는 유용한 방법이 있습니다 .
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가 필요합니다