![grep 并重定向到 csv](https://linux22.com/image/181349/grep%20%E5%B9%B6%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20csv.png)
这是我正在解析的活动日志。根据 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