1

非常に大きな (500 MB) csv ファイルと、1 行に 1 単語を含む別のテキスト ファイルがあります。

特定の列のcsvのテキストファイルに単語が見つかったら、その行を出力したい(出力をファイルにリダイレクトします)。grep -iE "(word1|word2|word3|...|wordn)" を使用した grep ソリューションがありましたが、セグメンテーション違反で 16 GB メモリを使用した後にクラッシュし、ごくわずかなエントリしか抽出されませんでした。

csvtool を試しましたが、価値のあるものを生成することを拒否しました。

このソリューションは Linux で動作する必要があり、最適にはメモリの上限を超えないようにする必要があります。

4

1 に答える 1

1

を使用しawkます。最初に 1 行に 1 語でファイルを処理し、そのデータを配列に保存し、2 番目のファイルについて、式if (column in array)を使用して特定の列をチェックします。

awk '
    BEGIN {
        FS = OFS = ",";
    }
    FNR == NR {
        data[ $1 ] = 1;
        next;
    }
    FNR < NR {
        if ( $4 in data ) {
            print $0;
        }
    }
' textfile large_csv_file
于 2012-08-15T11:16:31.123 に答える