数列と数百万行 (2010-12-15 として書式設定された日付列を含む) を含む 2 GB の CSV ファイルがあります。この CSV を、日付ごとにフォルダーに配置された小さな CSV に分割しようとしています (たとえば、2010 年 12 月 15 日のすべてのエントリは 20101215 という名前のフォルダー内にあります)。
私はこれにかなり慣れていませんが、分割コマンドを認識しています。正しい方向に私を向けることができますか?
前もって感謝します!
データの規則性とクリーン度に応じて、次のようなもので十分な場合があります。
for i in `cut -d, -f 2 <csv | sort -u`; do
mkdir $i && grep $i csv > $i/csv
done
csv
(データがファイルにあり、日付情報が2番目の列にあると仮定します)
これは何をしているのですか?2 番目の列のcut
日付が除外され、それらが実行さsort -u
れて、一意の日付の並べ替えられたリストが作成されます。次に、これ (for
コマンド) を繰り返し処理し、エントリごとmkdir
に対応するディレクトリを取得します。grep の結果は、そのディレクトリ内の csv ファイルになります。
それは理想的ではありません。たとえば、各日付の入力ファイルを grep します。私は、データが規則的であり、日付文字列 (たとえば 2012-08-06) がデータの他の場所に表示されていない (または、上記のスクリプトを台無しにする文字 (スペースや など) を含んでいない) と想定しています/
。
split
ここでコマンドが役立つとは思いません。ファイルを通常のチャンクに (サイズまたは行数で) 分割する場合に便利です。