2012-10-27 2 views
4

는 최근 다음과 같습니다 .csv 파일을 취할 요청을받은 염두에처리 CSV 데이터

enter image description here

키핑이있다 사용자가 로그인/로그 아웃 할 때마다 새로운 행이 작성되어 수천 개의 행이 아니라 수백 개가 될 것이고 단순히 두 명 이상의 사용자가있을 것입니다. 내 첫 번째 생각은 .csv 파일을 MySQL에로드 한 다음 쿼리를 실행하는 것입니다. 그러나, 나는 이것을 위해 사용될 기계에 MySQL을 설치하기를 정말로 원하지 않는다.

Ecxel/Open Office의 각 에이전트에 대해 수동으로 수행 할 수 있지만 오류가 발생할 여지가 적고이 작업을 수행 할 라인이 너무 많기 때문에 프로세스를 자동화하고 싶습니다. 그것에 대해 가장 좋은 방법은 무엇입니까?

+0

sqlite는 어떻습니까? –

+0

SQLite는 괜찮을 것이고, 나는 단지 데이터베이스 사용을 피하려고합니다. 정말 Excel에서 함수를 사용하거나 .csv를 처리 할 수있는 프로그램을 사용하여이 작업을 쉽고 빠르게 처리 할 수 ​​있기를 바랍니다. –

+0

글쎄요, 엑셀은 다소 제한되어 있으므로 수천 개의 행이 그 한계에 도달 할 수 있습니다. 데이터의 양을 관리하기 위해 데이터베이스가 구축되며 새 행을 추가하는 스크립트를 만드는 것이 간단합니다. –

답변

1

SQLite를 사용하기로 결정한 경우의 예를 들어 보겠습니다. 당신은 언어를 지정하지 않았지만 의사 코드로 읽을 수 있기 때문에 파이썬을 사용할 것입니다. 이 부분은 SQLite는 파일을 생성합니다

import csv 
import sqlite3 

con = sqlite3.Connection('my_sqlite_file.sqlite') 
con.text_factory = str 
cur = con.cursor() 
cur.execute('CREATE TABLE "mytable" ("field1" varchar, \ 
    "field2" varchar, "field3" varchar);') 

을 당신은 명령을 사용하면 CSV 파일에서 읽을 일단

cur.executemany('INSERT INTO stackoverflow VALUES (?, ?, ?)', list_of_values) 

가 데이터베이스에 행을 삽입 할 수 있습니다. 데이터베이스에 세 개의 필드 만 생성 했으므로 list_of_values의 값 3 개만 삽입합니다. 그래서 (?, ?, ?)을 사용하고 있습니다. 타임 스탬프 앞뒤로 변환

2

이것은 라이너 awk에만 의존하고 date :

awk 'BEGIN{FS=OFS=","}NR>1{au=$1 "," $2;t=$4; \ 
"date -u -d \""t"\" +%s"|getline ts; sum[au]+=ts;}END \ 
{for (a in sum){"date -u -d \"@"sum[a]"\" +%T"|getline h; print a,h}}' test.csv 

같이 test.csv 갖는

Agent,Username,Project,Duration 
AAA,aaa,NBM,02:09:06 
AAA,aaa,NBM,00:15:01 
BBB,bbb,NBM,04:14:24 
AAA,aaa,NBM,00:00:16 
BBB,bbb,NBM,00:45:19 
CCC,ccc,NDB,00:00:01 

결과 :

CCC,ccc,00:00:01 
BBB,bbb,04:59:43 
AAA,aaa,02:24:23 

내선을 약간 조정해도 사용할 수 있습니다. 여분의 열에서 날짜를 빼내기.

+0

+1 나는 'awk'를 봐야 할 것입니다. 그것은 아주 주목할 만하다. – brettdj