2016-10-05 6 views
0

다음 알고리즘으로 파일을 분할하고 싶습니다. split -l ${MAX_NUMBER_OF_LINES} filename.csv ${new_file_pattern}.Bash : 2 개의 요인/변수로 분할

그러나 원래의 요구 사항은 다음과 같습니다

이 CSV는 alpabetically (sort -k2 -n file.csv)

은 현재 내가 동일한 라인의 수의 파일을 분할하려면이 명령을 실행할 수 있습니다 이전 이름으로 정렬 3600 선이 : 청크로 분할 ${MAX_NUMBER_OF_LINES}UNLESS 열 2의 첫 번째 문자가있는 레코드가 더 이상 존재하지 않습니다.

예 : 내가 ${MAX_NUMBER_OF_LINES} = 3 인 경우 열의 마지막 첫 문자의 통화가 더 이상 발견되지 않으면 파일을 300 줄로 분할 할 수 있습니다.

LINE 301에 "Arboreal Peaches"라는 레코드가있는 경우 ${MAX_NUMBER_OF_LINE}이 이미 도달했는지에 관계없이 스크립트는 현재 청크에 추가해야합니다.

일종의 혼란 설명이다 ... 내가 너희 중에 누구든지 나를 도울 수 있기를 바랍니다

UPDATE

${MAX_NUMBER_OF_LINES} = 3

예 CSV 적은과 ((난 이미이 알고리즘 2 일 소요) 법선 목적을위한 라인). 분할 명령은 $ {MAX_NUMBER_OF_LINES를}에 도달하지만, 라인 (4)이 이미 문자로

'Aberdeen Research", 'Los Angeles', 'California' 
'Aplueyo Labs", 'Los Angeles', 'US' 
'Acar Media Group", 'Los Angeles', 'US' 
'Aberdeen Research", 'San Jose', 'US' 
'Beethoven Inc", 'San Jose', 'US' 

예상 된 결과를 기록을 가지고

분할 된 파일

1

'Aberdeen Research", 'Los Angeles', 'California' 
'Aplueyo Labs", 'Los Angeles', 'US' 
'Acar Media Group", 'Los Angeles', 'US' 
'Aberdeen Research", 'San Jose', 'US' 

2

'Beethoven Inc", 'San Jose', 'US' 
+0

파일 및 원하는 결과물을 실행할 수있는 샘플을 게시하는 것은 어떻습니까? –

+0

@JamesBrown가 이미 업데이트되었습니다! 당신의 도움을 주셔서 감사합니다! – rcastellanosm

답변

0

이와 비슷한?

$ cat split.awk 
BEGIN {if(max=="") 
    print "Invalid numer of lines"; exit  # exit if no max 
} 
(a=substr($0,2,1)) && ++c>=max && prev!=a { # first letter to a, if count >= max 
    c=0          # and first letter changes 
    fc++          # reset count and filemask counter 
} 
{ 
    print $0 > (mask==""?"x":mask) (fc==""?0:fc) # write to file default mask x 
    prev=a         # remember previous first letter 
} 

실행을 : AWK에서

$ awk -v max=3 -v mask="file" -f split.awk file.csv 
$ cat file0 
'Aberdeen Research", 'Los Angeles', 'California' 
'Aplueyo Labs", 'Los Angeles', 'US' 
'Acar Media Group", 'Los Angeles', 'US' 
'Aberdeen Research", 'San Jose', 'US' 
$ cat file1 
'Beethoven Inc", 'San Jose', 'US' 

mask은 파일 이름 접두어 또는 $new_file_pattern하고 max는, 예를 $MAX_NUMBER_OF_LINES입니다. 명령 행에서 -v max=$MAX_NUMBER_OF_LINES -v mask=$new_file_pattern을 설정하십시오.

+1

확실히 두 번째 출력 파일은'file1'이 될 것입니까? – tripleee

+0

나는 이것을 지금 시도 할 것이다! 결과를 알려주십시오! – rcastellanosm

관련 문제