다음 스키마를 가진 거대한 파일이 있습니다.
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