Linux 터미널에서 긴 크기의 CSV 파일에서 데이터를 분리하는 방법은 무엇입니까?

Linux 터미널에서 긴 크기의 CSV 파일에서 데이터를 분리하는 방법은 무엇입니까?

.csv약 30GB 크기의 파일이 있습니다 . 여러 문자열 일치 기준을 따라야 하는 일부 줄을 파악하고 싶습니다. 또는 를 사용하여 이 작업을 수행하는 올바른 방법은 무엇입니까 grep? 결과를 반환하는 다음 명령을 실행해 보았지만 이전 날짜 데이터도 표시됩니다.awksed

grep -w "for-outbound-sports\|2019-05-16" Master.csv

awk또는 sed등을 사용하여 더 빠르게 수행할 수 있는 다른 방법이 있습니까 ?

고쳐 쓰다

보다 구체적으로 입력 예는 다음과 같습니다.

"","22288","1990353330","for-outbound-STARZONE","22288","Local/1990353330@for-outbound-STARZONE-00042f49;2","DAHDI/i15/01990353330-c237","Dial","DAHDI/G0/01990353330,30","2019-01-17 13:45:05","2019-01-17 13:45:17","2019-01-17 13:45:32",27,15,"ANSWERED","DOCUMENTATION","1547732705.828852",""
"","22020","1990353330","for-outbound-sports","22020","Local/1990353330@for-outbound-sports-001b223f;2","DAHDI/i14/01990353330-553f8","Dial","DAHDI/G0/01990353330,30","2019-05-15 03:57:02","2019-05-15 03:57:10","2019-05-15 03:57:44",42,34,"ANSWERED","DOCUMENTATION","1557979022.5390225",""
"","22020","1990353330","for-outbound-sports","22020","Local/1990353330@for-outbound-sports-001b223f;2","DAHDI/i14/01990353330-553f8","Dial","DAHDI/G0/01990353330,30","2019-05-16 03:57:02","2019-05-16 03:57:10","2019-05-16 03:57:44",42,34,"ANSWERED","DOCUMENTATION","1557979022.5390225",""

예제 출력:

"","22020","1990353330","for-outbound-sports","22020","Local/1990353330@for-outbound-sports-001b223f;2","DAHDI/i14/01990353330-553f8","Dial","DAHDI/G0/01990353330,30","2019-05-16 03:57:02","2019-05-16 03:57:10","2019-05-16 03:57:44",42,34,"ANSWERED","DOCUMENTATION","1557979022.5390225",""

답변1

grep이미 대용량 파일을 탐색하고 줄에서 단어나 문자를 찾는 매우 빠른 방법이지만 단어 -w정규식을 사용하면 약간 느려질 수도 있습니다. 느린 것은 프로그램 자체가 아니라 grep터미널의 출력 때문인 경우가 많습니다. 출력을 파일로 지정하여 간단하게 테스트할 수 있습니다.

grep -w "for-outbound-sports\|2019-05-16" Master.csv > greped_master.csv

언제든지 이 프로그램을 사용하여 parallel대용량 파일을 분할하고 멀티스레딩을 활용할 수 있습니다. parallel --pipe --block 2M grep foo < bigfile 보시 다시피 여기

관련 정보