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 見てください。 ここ

おすすめ記事