파일을 둘로 분할


18

큰 파일이 있고 두 파일로 분할해야합니다. 첫 번째 파일에서 1000 행을 선택하고 다른 파일에 넣고 첫 번째 파일에서 해당 행을 삭제한다고 가정하십시오.

나는 사용하려고 split했지만 여러 덩어리를 만들고 있습니다.


확인 했습니까 split --help?
Braiam

예, 확인했지만 필요하지 않은 여러 파일을 만들고 있습니다.
Aravind

답변:


30

가장 쉬운 방법은 아마도 headand 를 사용하는 것입니다 tail.

$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2

처음 1000 줄을 input-file안으로 넣고 output11001에서 끝까지 모든 줄을 넣 습니다.output2


13

나는 그것이 split당신에게 가장 좋은 접근법 이라고 생각합니다 .

-l xxxx옵션을 사용하십시오 . 여기서 xxxx는 각 파일에서 원하는 행 수입니다 (기본값은 1000).

-n yy생성 된 파일의 양에 더 관심이있는 경우이 옵션을 사용할 수 있습니다 . 사용 -n 2에는 각 파일의 행의 양을 문제 만 2 부분으로 파일을 분할하지 않습니다.

를 사용하여 파일의 줄 수를 계산할 수 있습니다 wc -l filename. 행 옵션이있는 'wordcount'명령입니다.

참고 문헌

  • man split
  • man wc

1
이것은 고정 된 수의 줄로 여러 파일로 분할하는 방법 또는 고정 된 수의 파일로 고르게 분할하는 방법입니다. 하나의 1000 줄 파일과 다른 모든 파일로 하나의 파일로 분할하는 방법이 있습니까? 그것이 그가 요구 한 것입니다. 맨 페이지에서 찾을 수 없습니다
Michael Mrozek

당신은 올바른 마이클입니다. 나는 그 질문에 대해 단순한 견해를 취했다고 생각합니다. 이 경우 솔루션이 가장 좋습니다. 또 다른 방법은 'sed'명령을 사용하는 것입니다 : sed -n 1,1000 originalfile> first_1000_lines. sed '1,1000d'원본 파일> 나머지 _ 줄.
Lucien Raven

물론 할 수 있습니다 split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??.
G-Man, 'Reinstate

8

이것은 직업입니다 csplit:

csplit -s infile 1001 

첫 번째 조각 s-1001 행까지 포함하지 않고 두 번째 조각 -나머지 행 을 ilently 분할 합니다. 접두사 사용 및 지정과 같이 다른 출력 파일 이름이 필요한 경우 옵션을 사용할 수 있습니다 .infilexx00xx01
-f

csplit -sf piece. infile 1001 

두 개의 파일을 생성 piece.00하고piece.01


똑똑 head하면 다음과 같은 일을 할 수도 있습니다.

{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile

1
와우, 정말 입니다 에 대한 작업 csplit. 아주 좋아요 (나는 단지 POSIX 명령 목록을 읽고 있는데 csplit처음 에는 명령의 목적으로 머리를 감싸는 데 큰 어려움을 겪었습니다 . 실제로는 매우 간단합니다.) :)
Wildcard

4

하나의 명령으로 질문이 요구하는 것을 수행하는 간단한 방법 :

awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile

또는 길고 직관적으로 이해하기 쉬운 명령을 입력하는 것을 정말로 싫어하는 사람들에게는

awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.