UNIXシェルで多くのgrep awkソートを使用して、中サイズ(約10M〜100M行)のタブ区切りの列テキストファイルを処理します。この点で、UNIXシェルは私のスプレッドシートです。
しかし、私には1つの大きな問題があります。それは、IDのリストを指定してレコードを選択することです。
持つtable.csv
形式のファイルid\tfoo\tbar...
とids.csv
IDのリストを含むファイルを、のみからレコードを選択するtable.csv
のID存在とids.csv
。
一種の/programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-idsですが、perlではなくシェルを使用しています。
grep -F
idが可変幅の場合、明らかに偽陽性を生成します。
join
私が理解できなかったユーティリティです。まず、アルファベット順の並べ替えが必要です(通常、ファイルは数値順に並べ替えられます)が、それでも正しくない順序について文句を言わず、一部のレコードをスキップせずに機能させることはできません。だから私はそれが好きではありません。^id\t
IDの数が多い場合、-sを使用したファイルに対するgrep -f は非常に遅くなります。
awk
面倒です。
これに対する良い解決策はありますか?タブ区切りファイル用の特定のツールはありますか?追加機能も大歓迎です。
UPD:修正済みsort
->join
awk
。
sort
あらゆる種類のソート、数値、アルファベット順などを実行できます。を参照してくださいman sort
。
grep -f
遅すぎる場合、この戦略を維持することは、価値があるよりもトラブルのように聞こえます。バリエーションは、おそらく同じO(N * M)パフォーマンス問題の犠牲になります。多分あなたの時間は正規化された SQL DBの使い方を学ぶことに費やしたほうがいいでしょう...