grep 并重定向到 csv

grep 并重定向到 csv

这是我正在解析的活动日志。根据 call-id 我执行 grep 操作。

原始进度日志如下:

FilePlayer::run:: Finished audio file is /voip/VoiceCampaigSetup/wildfly-10.1.0.Final/standalone/deployments/waves.war/waveFiles/AA/E1/welcome1.g711u for [email protected]
FilePlayer::run:: going to play next audio file /voip/VoiceCampaigSetup/wildfly-10.1.0.Final/standalone/deployments/waves.war/waveFiles/AA/E1/Announcementbui.g711u for [email protected]

以上适用于 1 个用户,类似地适用于 5 个用户,如前文所述。在脚本中,我从数据库中获取了一些用户和相应的call-id并迭代了5次,脚本中使用的grep是:

START="FilePlayer::run:: Finished audio file is /voip/VoiceCampaigSetup/wildfly-10.1.0.Final/standalone/deployments/waves.war/waveFiles/AA/guest/"
END=" for $call_id"
grep -oP "(?<=$START).*?(?=$END)" $IVRLOG$Progress_log>>$CURRENTPATH/op2.csv

我得到的输出为每个呼叫 ID 的welcome1.g711u、Announcement1.g711u 等。

但我希望输出为

welcome1.g711u, Announcement1.g711u (for call-id1)
welcome1.g711u, Announcement1.g711u (for call-id2)..

直到 5 个这样的呼叫 ID。我仍然可以在第一次 call-id1 解析后立即转置,例如

sed 'N;s/\n\(Announcement\)/ \1/;P;D' $CURRENTPATH/E32.csv >$CURRENTPATH/E36.csv. 

问题是,如果只播放公告而不播放欢迎...这不是正确的方式。

比较完美的解析方式是:

9841778579,welcome1,Announcement1
9841778580,welcom1,Announcement1

答案1

我可以看到您之前问过有关将 的输出转换grep为逗号分隔列表的问题。在那里,建议的解决方案采用以下形式grep ... | paste -d ',' - -。您也可以针对这种情况扩展相同的方法。只需打印 call-id 变量的值,并将其传递给命令即可paste

{ printf "%s\n" "$call-id"; grep .... ; } | paste -d ',' - - -

这将为您提供所需的输出格式:

123456789,welcome1.g711u,Announcementbui4.g711u

相关内容