2013-04-05 1 views
1

총 라인 수의 세 번째와 세 개의 파일로 파일, N 라인의 총우분투 분할 I 각 줄의 문자열 간단한 ASCII 텍스트 파일이 각

aa1 
aa2 
ab1 
... 

같은 . 분할 명령을 사용하여 파일 당 고정 된 수의 행으로 나눌 수 있다는 것을 알고 있습니다. 파일을 분할 할 파일 수를 어떻게 지정하고 분할하여 각 파일에 얼마나 많은 행을 넣을 지 결정합니다. 파일이 100 선을했다 예를 들어, 나는

split 3 foo.txt 

을 지정할 수 있도록하려면 그것은 세 개의 파일을의 Xaa의 XAB와 XAC 33, 33, 34 라인과 각을 작성합니다. 이것은 가능한가? 아니면 이것에 대한 커스텀 Perl 스크립트를 작성합니까?

답변

1

이 일을보십시오 :

split -n 3 file 

가 [*]

당신은 행의 수를 얻기 위해 '화장실'사용할 수 있습니다 및 분할에 대한 옵션이 없습니다

man split | less +/'^\s*-n' 
1

참조 3만큼, 그래서 당신이 사용하고자하는 스크립트의 몇 라인입니다.

([*] 업데이트 : 우분투에는 그게 무엇에 관한 것이 었는지에 관한 것입니다. -n 모든 리눅스 나 그 이상에 존재하지 않는 것 같습니다.)

+0

참조 sputnick의 대답 – HXCaine

+0

저주 나 우분투에서 '사람의 분할'을 실행하지 않는! – greggo

+0

10.10 (이전 버전)에 있는데 -n 옵션이 없습니다. – broccoli

0

split에 -n 옵션이 없다는 의견을 말씀 드리 자면 여기에 약간의 접근법이 있습니다. 이렇게하면 다음과 같이

lines=`wc -l < foo.txt` 
lines=$((lines/3+1)) 
split $lines foo.txt 

자주 분할 및 파일 이름의 수에 복용하여 스크립트에 저장할 수 :

splits=$1 
filename=$2 
lines=`wc -l < $filename` 
lines=$((lines/$splits+1)) 
split $lines $filename 
0

당신이 할 수있는 paramater 당신의 분할 구현이 -n을 허용하지 않는 경우 이 bash는 함수를 사용

function split_n() { split -l $((($1+`wc -l <"$2"`-1)/$1)) "$2" "${3:-$2.}"; } 

당신은

로 호출 할 수 있습니다

또는

split_n 3 file.txt prefix 
관련 문제