주어진 줄에 파일을 두 개의 파일로 분할 가깝지만이 명령은 각각 100

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

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



답변

좀 더 단단한 솔루션 :

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

답변

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

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

답변

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

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

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

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


답변

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

csplit file N+1

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

csplit file N

답변

모두 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자세한 내용 은 매뉴얼 페이지 를 참조하십시오.


답변

‘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

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