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