모든 X 정규식 패턴 일치를 기반으로 파일 분할

모든 X 정규식 패턴 일치를 기반으로 파일 분할

이 질문은 다음과 유사합니다.정규식을 기반으로 텍스트 파일 분할, 그러나 정확히 동일하지는 않습니다. 내 문제는 특정 수의 파일로 분할하고 싶지 않지만 실제로는 일치하는 수에 따라 분할하고 싶다는 것입니다. 예: 457MB 파일이 있는데 이를 더 작은 파일로 분할하려고 합니다. 현재 진행 중인 작업은 다음과 같습니다.

csplit -z Scan.nessus /\<ReportHost/ '{*}'

그러나 이로 인해 약 61.5k개의 파일이 생성되었습니다.<ReportHost이 457MB 파일의 항목입니다. 궁극적으로 모든 항목이 아닌 50개 항목마다 분할하고 싶습니다.

이를 달성하기 위해 수정하는 방법이 있습니까? 이 작업을 Ruby에서 어느 정도 하려고 하는데, Nokogiri를 사용하여 파일을 구문 분석하려고 하면 가상 머신의 메모리가 소모되는 것 같습니다.

답변1

재사용 awk- 방법

BEGIN{outfile="part_0" ; j=-1}
/\<ReportHost/ {j++}
j==50 {outfile="part_"++i ; j=0}
{print > outfile}

다음으로 실행

awk -f split.awk Scan.nessus

처리 중 오래된 파일을 삭제하지 못하는 문제가 여전히 존재합니다.

제로 패딩 출력 파일의 경우 다음을 사용할 수 있습니다.

outfile="part_"sprintf("%04d",i++)

BEGIN 블록의 "part_0000"입니다. 그러면 파일 개수가 10,000개를 넘지 않았으면 좋겠습니다. 또는 예상되는 파일 수를 미리 확인하세요.

관련 정보