Shell-Script

grep 並重定向到 csv

  • October 9, 2020

這是我正在解析的活動日誌。基於 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

引用自:https://unix.stackexchange.com/questions/613304