Linux csv列中嵌入逗号的匹配模式
我有一个每日脚本,需要在上传到数据库之前提取错误日志并从主csv文件中删除用户。 我能够使用awk提取第一列,结果非常好。但是,我从第三方应用程序返回的错误在错误列中包含一个逗号。这会阻止精确匹配并导致问题 这是我得到的错误文件的一个示例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",
"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解析器的语言。