1

我有一个非常大(500mb)的 csv 文件和另一个每行包含一个单词的文本文件。

当我在特定列中的 csv 文本文件中找到一个单词时,我想输出该行(将输出重定向到文件)。我有一个使用 grep -iE "(word1|word2|word3|...|wordn)" 的 grep 解决方案,但是在使用 16gb 内存和段错误后它崩溃了,并且只提取了很少的条目。

我试过 csvtool 但它拒绝产生任何有价值的东西。

该解决方案必须在 linux 下工作,并且最好不要限制内存。

4

1 回答 1

1

使用awk. 首先处理每行一个单词的文件,将其数据保存在一个数组中,然后对于第二个文件,使用表达式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 回答