주어진 줄에 파일을 두 개의 파일로 분할


12

유닉스에서 파일을 주어진 줄 번호에서 두 개의 파일로 나누는 방법을 찾고 있습니다.

split -l 100 file_name내가 찾고있는 것에 가깝지만이 명령은 각각 100 줄씩 여러 파일을 만듭니다. 주어진 줄 번호에서 파일을 두 개의 파일로 나누는 명령을 찾고 있습니다. 유닉스에서 이것을 할 수있는 방법이 있습니까?

답변:


13

좀 더 단단한 솔루션 :

(head -100 > f1.txt; cat > f2.txt) < input.txt

1
좋은 해결책. wc이전과의 계산은 없으며 입력 파일은 awk솔루션 과 마찬가지로 한 번만 처리됩니다 .
Dubu

2
head출력 할 첫 100 개의 줄을 찾기 위해 100 줄 이상을 읽을 가능성이 약간 있습니다 f1.txt. 이 여분의 바이트는 표시되지 않습니다 cat.
chepner

이것은 너무나 느리다
sdaffa23fdsf

12

awk입력 파일을 한 번만 통과하면되므로 사용하십시오 . 다음은 첫 번째 파일에서 첫 번째 122 행을, 두 번째 파일에서 나머지를 원한다고 가정합니다.

awk 'NR < 123 { print >> "top_file"; next } {print >> "bottom_file" }' file_name

이렇게하면 엄지 손가락이 필요합니다. 파일을 X에서 Y로 분할하려면 이것이 가장 쉽습니다.
Glenn Plas

이것이 가장 이해하기 쉬운 솔루션입니다. 매력처럼 일했습니다 ... 1999 년 이래로 가지고있는 O'Reilly Sed & Awk 책의 먼지를 털어 내야한다고 생각하게합니다 .sed 섹션은 잘 읽히고 awk 섹션은별로 읽지 않습니다.
Michael

이것은 의견에 @chepner가 언급 한 이유 때문에 예외 솔루션보다 낫습니다. 'f2.txt'파일에서 문자를 잃게됩니다. 이 솔루션은 정확하고 효율적입니다. awk ftw.
Goran

7

사용 head하고 tail두 부분을 모두 얻을 수 있습니다 .

head -n K file_name > top_file
tail -n L file_name > bottom_file

여기서 K줄 번호 L는 아래에서 줄 수입니다 (총 줄 수- K).

(를 사용하여 총 줄 수를 얻을 수 있습니다 wc -l file_name).


5

당신은 사용할 수 있습니다 csplit(가능한 경우)을 수행합니다

csplit file N+1

파일을 두 개의 조각으로 나눕니다 (하나 N는 줄 번호 N+1까지) . 다른 하나는 줄 번호 에서 마지막 줄까지.
줄 번호로 나누려면 (포함하지 않음) N:

csplit file N

좋아요! 고마워, 그것은 나를 위해 완벽하게 문제를 해결했습니다.
Zertrin

20GB 파일을 여러 조각으로 분할하기위한 최고의 성능.
dr0i

@ dr0i-당연히이 csplit작업에 최적화되어 있습니다.
don_crissti

분할 나는 그것이 :) 작동 2011 년 csplit 사용하여 2008 년에 csplit 날짜가 다시 사용 "메모리가 소진"당했습니다 200M 라인 - 파일
dr0i

4

모두 headtail그들이 다른 것보다 파일의 "다른"끝에서 생산 라인 옵션이 있습니다. 따라서 다음 두 가지 옵션이 있습니다.

head -n 100 source.txt > file1.txt
head -n -100 source.txt > file2.txt

또는 (NNN이의 출력보다 100이 적음 wc -l source.txt) :

tail -n +NNN source.txt > file1.txt
tail -n NNN source.txt > file.txt

사용중인 버전 headtail자세한 내용 은 매뉴얼 페이지 를 참조하십시오.


0

'wc', 'dc', 'head'및 'tail'을 사용할 수 있습니다. 즉

unix> wc -l foo
545 /tmp/foo
unix> dc -e '545 100 - p'
445
unix> head -n 100 foo > filea
unix> tail -n 445 foo > fileb

사용하기 쉽도록 쉘 스크립트로 전환 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.