Linux 从csv输出特定行

Linux 从csv输出特定行,linux,csv,sed,awk,grep,Linux,Csv,Sed,Awk,Grep,我有一个非常大(500mb)的csv文件和另一个文本文件,每行包含一个单词 当我在csv的文本文件中找到一个单词时,我想输出该行(将输出重定向到一个文件)。我有一个使用grep-iE(word1 | word2 | word3 |…| wordn)的grep解决方案,但它在使用带有segfault的16gb内存后崩溃,只提取了很少的条目 我尝试了csvtool,但它拒绝产生任何有价值的东西 该解决方案必须在linux下工作,并且最好不占用内存。使用awk。首先处理每行一个字的文件,将其数据保存在

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

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

我尝试了csvtool,但它拒绝产生任何有价值的东西


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

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

awk '
    BEGIN {
        FS = OFS = ",";
    }
    FNR == NR {
        data[ $1 ] = 1;
        next;
    }
    FNR < NR {
        if ( $4 in data ) {
            print $0;
        }
    }
' textfile large_csv_file
awk'
开始{
FS=OFS=“,”;
}
FNR==NR{
数据[$1]=1;
下一个
}
FNR
使用
awk
。首先处理每行一个字的文件,将其数据保存在数组中,对于第二个文件,使用表达式if(数组中的列)检查特定列:

awk '
    BEGIN {
        FS = OFS = ",";
    }
    FNR == NR {
        data[ $1 ] = 1;
        next;
    }
    FNR < NR {
        if ( $4 in data ) {
            print $0;
        }
    }
' textfile large_csv_file
awk'
开始{
FS=OFS=“,”;
}
FNR==NR{
数据[$1]=1;
下一个
}
FNR
对不起,我从未使用过awk。在哪里指定要检查的列?我的猜测是if($4在数据中){。是$4是列号吗?如果是,它是从列0开始的零索引吗?@Birei工作起来,速度非常快。一个小错误:我必须使用NF>1而不是FNR1而不是FNR