2016-10-05 1 views
-1

한 번 전체 파일을 읽을 수없는 큰 (수 GB) 파일을 여는 것을 가정 해 봅니다.awk를 사용하여 청크로 데이터를 처리하고 저장하는 방법은 무엇입니까?

for chunk in pd.read_csv('path/filename', chunksize=10**7): 
    # save chunk to disk 

을 아니면 팬더와 비슷한 뭔가를 할 수 : 그것은 csv 파일이 있다면

, 우리가 사용하는 것이

import pandas as pd 
with open(fn) as file: 
    for line in file: 
     # save line to disk, e.g. df=pd.concat([df, line_data]), then save the df 

어떻게 않는 awk 스크립트 하나 "덩어리"데이터? Awk는 텍스트를 원하는 형식으로 파싱/처리하지만 awk로 "덩어리"하는 방법을 모르겠습니다. 하나는 스크립트 script1.awk을 작성한 다음 데이터를 처리 할 수 ​​있지만이 작업은 전체 파일을 한 번에 처리합니다. 더 구체적인 예와

관련 질문 : How to preprocess and load a "big data" tsv file into a python dataframe?

+1

awk이 조건에 따라 큰 파일을 여러 파일로 나눌 수 있는지 묻고 있습니까? 그렇다면 _ 가능합니다. 입력 파일과 같은 더 많은 정보를 제공하고 그것을 어떻게 처리하길 원한다면 더 많은 도움이 될 것입니다 – Inian

+0

기본적으로 한 줄씩 읽지 않습니다 (다른 레코드 구분 기호를 지정하기 위해 RS를 사용하여 변경할 수 있음) - 따라서 파일 크기 멍청이야? – Sundeep

+0

무엇에 관한 질문입니까? awk 또는 python/pandas? 이미 파이썬을 사용하고 있다면 awk를 사용하여 요점을 보지 못합니다. –

답변

1

AWK 디자인에 의해 한 번에 하나의 레코드 (덩어리)를 읽습니다. 기본적으로 레코드는 데이터 라인이지만 RS(레코드 구분 기호) 변수를 사용하여 레코드를 지정할 수 있습니다. 각 코드 블록은 다음 읽기 전에 조건부 현재 레코드에 실행됩니다

$ awk '/pattern/{print "MATCHED", $0 > "output"}' file 

가 위의 스크립트는 입력 파일에서 한 번에 한 줄을 읽어와 그 라인이 pattern을 matchs 경우가있는 라인을 절약 할 수 다음 줄을 읽기 전에 파일 출력 앞에 MATCHED이 붙습니다.

+0

이 질문을 살펴보십시오. http://stackoverflow.com/questions/39886440/python-subprocess-command-requires-a-text-file-to-read-but-takes-lines-from-tex 파이썬에서, 나는'line '를 선택하고 HDF5 파일 형식으로 저장하십시오. awk로는이 작업을 수행 할 수 없습니다. – ShanZhengYang

관련 문제