从csv输出特定行

时间:2012-08-15 11:10:43

标签: linux csv sed awk grep

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

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

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

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

1 个答案:

答案 0 :(得分:1)

使用awk。首先处理文件每行一个单词,将其数据保存在数组中;对于第二个文件,使用表达式 if(数组中的列) 检查特定列:< / p>

awk '
    BEGIN {
        FS = OFS = ",";
    }
    FNR == NR {
        data[ $1 ] = 1;
        next;
    }
    FNR < NR {
        if ( $4 in data ) {
            print $0;
        }
    }
' textfile large_csv_file