匹配模式与嵌入在csv列中的逗号

时间:2016-04-26 17:29:50

标签: linux bash csv

我有一个日常脚本,需要在上传到数据库之前提取错误日志并从master csv文件中删除用户。 我能够使用awk提取第一列并获得很好的结果。但是,我从第三方应用程序返回的错误在错误列中包含逗号。这会阻止完全匹配并导致问题。

这是我收到的错误文件的示例

"USER_ID","FIRSTNAME","LASTNAME","ERROR"
"CA781558","Dani","Roper","parent is inactive, cannot update record"
"BT055163","Alexis","Richardo","parent is inactive, cannot update record"
"LN764767","Peter","Rajosz","no parent record, update denied"
"SG839717","Jerry","Alindos","parent is inactive, cannot update record"

我需要完全匹配" 父级处于非活动状态,无法更新记录",使用它来更新父记录,因此可以更新。 同样,我需要匹配" 无父记录"所以我可以为此记录和流程添加父级。 实际上,我有一些类似的错误消息需要不同的操作。使用逗号匹配确切的字符串是至关重要的。

预期输出为:

"USER_ID"
"CA781558"
"BT055163"
"SG839717"

3 个答案:

答案 0 :(得分:1)

使用awk即可:

s='parent is inactive, cannot update record'
awk -v s="\"$s\"" -F, 'NR==1 || $0 ~ s{print $1}' file

"USER_ID"
"CA781558"
"BT055163"
"SG839717"

答案 1 :(得分:1)

只需使用此功能(awk就此而言过度杀伤):

cat infile.txt | grep 'parent is inactive, cannot update record' | cut -d ',' -f1

答案 2 :(得分:0)

我会选择合适的csv解析器。以下是使用核心模块Are there conventions on how to name resources?的示例,因此您无需从CPAN下载它。

$( document ).scroll( function( e ) {
    if ( $(document).scrollTop() > 250 ) {
        $('html, body').animate({
            scrollTop: $("#cy-hero-image").offset().top
        }, 650);
    }
});