답변:
가장 쉬운 방법은 아마도 head
and 를 사용하는 것입니다 tail
.
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
처음 1000 줄을 input-file
안으로 넣고 output1
1001에서 끝까지 모든 줄을 넣 습니다.output2
나는 그것이 split
당신에게 가장 좋은 접근법 이라고 생각합니다 .
-l xxxx
옵션을 사용하십시오 . 여기서 xxxx는 각 파일에서 원하는 행 수입니다 (기본값은 1000).
-n yy
생성 된 파일의 양에 더 관심이있는 경우이 옵션을 사용할 수 있습니다 . 사용 -n 2
에는 각 파일의 행의 양을 문제 만 2 부분으로 파일을 분할하지 않습니다.
를 사용하여 파일의 줄 수를 계산할 수 있습니다 wc -l filename
. 행 옵션이있는 'wordcount'명령입니다.
man split
man wc
split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
.
이것은 직업입니다 csplit
:
csplit -s infile 1001
첫 번째 조각 s
-1001 행까지 포함하지 않고 두 번째 조각 -나머지 행 을 ilently 분할 합니다. 접두사
사용 및 지정과 같이 다른 출력 파일 이름이 필요한 경우 옵션을 사용할 수 있습니다 .infile
xx00
xx01
-f
csplit -sf piece. infile 1001
두 개의 파일을 생성 piece.00
하고piece.01
똑똑 head
하면 다음과 같은 일을 할 수도 있습니다.
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
csplit
. 아주 좋아요 (나는 단지 POSIX 명령 목록을 읽고 있는데 csplit
처음 에는 명령의 목적으로 머리를 감싸는 데 큰 어려움을 겪었습니다 . 실제로는 매우 간단합니다.) :)
하나의 명령으로 질문이 요구하는 것을 수행하는 간단한 방법 :
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
또는 길고 직관적으로 이해하기 쉬운 명령을 입력하는 것을 정말로 싫어하는 사람들에게는
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
split --help
?