Shell-Script
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 1598852543429-8681@81.171.12.213 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 1598852543429-8681@81.171.12.213
以上適用於 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
我得到的輸出是welcome1.g711u、Announcement1.g711u per call-id 等等。
但我希望輸出為
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
我可以看到你已經問過一個關於將輸出轉換
grep
為逗號分隔列表的問題。在那裡,建議的解決方案是grep ... | paste -d ',' - -
. 您也可以為這種情況擴展相同的方法。只需列印 call-id 變數的值,並將其傳遞給paste
命令。{ printf "%s\n" "$call-id"; grep .... ; } | paste -d ',' - - -
這將為您提供所需的輸出格式:
123456789,welcome1.g711u,Announcementbui4.g711u