簡體   English   中英

匹配模式,csv列中嵌入逗號

[英]Matching pattern with a comma embedded in csv column

我有一個日常腳本,需要在上載到數據庫之前提取錯誤日志並從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在此目的上awk是過大了):

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

我會選擇合適的csv解析器。 以下是使用核心模塊Text :: ParseWords的示例,因此您無需從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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM