Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux csv列中嵌入逗号的匹配模式_Linux_Bash_Csv - Fatal编程技术网

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

Linux csv列中嵌入逗号的匹配模式,linux,bash,csv,Linux,Bash,Csv,我有一个每日脚本,需要在上传到数据库之前提取错误日志并从主csv文件中删除用户。 我能够使用awk提取第一列,结果非常好。但是,我从第三方应用程序返回的错误在错误列中包含一个逗号。这会阻止精确匹配并导致问题 这是我得到的错误文件的一个示例 "USER_ID","FIRSTNAME","LASTNAME","ERROR" "CA781558","Dani","Roper","parent is inactive, cannot update record" "BT055163","Alexis",

我有一个每日脚本,需要在上传到数据库之前提取错误日志并从主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"

使用
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"

使用
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"

我会使用合适的csv解析器。下面是一个使用核心模块的示例,所以您不需要从CPAN下载它

perl -MText::ParseWords -lne '
    @line = parse_line(",", 1, $_);
    print $line[0] if $.==1;
    print $line[0] if $line[3] =~ /parent is inactive, cannot update record/;
' file
"USER_ID"
"CA781558"
"BT055163"
"SG839717"

我会使用合适的csv解析器。下面是一个使用核心模块的示例,所以您不需要从CPAN下载它

perl -MText::ParseWords -lne '
    @line = parse_line(",", 1, $_);
    print $line[0] if $.==1;
    print $line[0] if $line[3] =~ /parent is inactive, cannot update record/;
' file
"USER_ID"
"CA781558"
"BT055163"
"SG839717"
简单地使用这个(
awk
对于这个目的来说是过分的):

简单地使用这个(
awk
对于这个目的来说是过分的):


使用具有适当CSV解析器的语言。使用具有适当CSV解析器的语言。