2017-11-18 1 views
6

큰 텍스트 파일 (475,000,000 줄)이 있습니다. 나는 그것을 읽지 않고 파일의 행 수를 빨리 얻고 싶다. 이 행 번호를 추출하는 방법은 전체를 읽지 않고 있습니까전체 파일을 읽지 않고 fread에서 행 수 추출

fread('D:/text_file.txt',select=1,colClasses="character") 
Read 7.1% of 472933221 rows #number of rows appears after 10 seconds 

: data.table에서

fread 실제로는 매우 빠른 속도 (~ 10 초 정도의 시간)이 전체 파일을 읽을 진행하기 전에 행 번호와 함께 제공 나중에 파일? 기록을 위해 전체 파일을 읽는 데 36 초가 걸립니다.

countLinesR.utils에서 시도했지만 53 초가 걸렸습니다. 차이점은 fread에는 하나의 열만 선택하고 countLines는 모든 것을 읽는 옵션이있을 수 있습니다.

R.utils::countLines("D:/text_file.txt") #53 seconds 

는 또한 같은 다른 Windows 방법을 시도 :

find /v /c "" "D:\text_file.txt" #takes 1 minute 50 seconds 
grep "^" D:\text_file.txt | wc -l #takes 2 minutes 

이 작업을하지만, 그들은 빨리 fread로 아니에요. 나는 윈도우에있어.

+4

시도'화장실 -l filename' 윈도우 Rtools에서 발견. –

+1

C에 작은 함수를 작성하려고 했습니까? 그것은 매우 쉽고 빠르다. – nicola

+0

@ G.Grothendieck 감사합니다. 매력처럼 작동합니다. 'shell ('wc.exe -l "D : /text_file.txt"', intern = TRUE)' –

답변

5

@ d.b. 내 질문에 대한 자세한 답변을 요청했습니다. @G로. Grothendieck은 대답은 wc (Rtools)이며 Microsoft Windows에서 R 패키지를 빌드하는 데 필요한 리소스 모음을 사용하는 것이 좋습니다.

설치가 완료되면 PATH에 Windows의 C:\Rtools\bin이 있는지 확인하십시오.

그런 다음 wcsystem 또는 shell를 사용하여 R 사용할 수있게됩니다 :

shell('wc -l "D:/text_file.txt"',intern =TRUE) 
관련 문제