csplit(또는 유사한 도구)을 사용하여 파일을 n개 파일로 분할

csplit(또는 유사한 도구)을 사용하여 파일을 n개 파일로 분할

다음 스키마를 가진 거대한 파일이 있습니다.

ABC
line 1
line 2
line 3
ABC
line 1
line 2
ABC
line1
ABC
line 1
line 3

도구를 사용하여 위 파일을 패턴에 따라 4개의 하위 파일로 분할 csplit할 수 있습니다 ./ABC/

csplit -z input.txt /ABC/ {*}

필요한 출력 파일 수를 수동으로 지정하는 방법을 알고 싶습니다.

답변1

사용할 수 있습니다 awk. 정확히 원하는 것은 아니지만 효과가 있을 수 있습니다.

아이디어: n 라인을 부품 파일로 인쇄한 다음 새 부품 파일을 만들기 전에 다음 패턴 발생을 검색합니다.

결점:

  • 큰 청크가 있고 해당 청크의 시작 부분을 건너뛰면 일부 파일이 다른 파일보다 훨씬 커질 수 있습니다.
  • 원본 파일은 삭제되지 않습니다(즉, 필요한 공간의 두 배).
  • 작성된 대로 일치하는 줄은 정확해야 합니다 ABC(같은 줄의 다른 단어와 비교할 때 허용 오차는 없으며 조정 가능).
  • 원하는 출력 파일 수(입력 파일의 줄 수로 추정) 대신 줄 수를 설정하여 작동합니다.

akw-스크립트

BEGIN{
    outfile="part_"++i
    j=0
    }
{ 
    j++
    #block size set to at least 10 lines in this example
    #if threshold line number reached: search for next keyword,
    #then increase part file name counter and reset line threshold counter
    if ( j>=10 && $0 == "ABC" ) { outfile="part_"++i ; j=0 }
    print > outfile
}

실행이 통과되었습니다.

awk -f script.awk input.txt

관련 정보