grepとcsvにリダイレクト

grepとcsvにリダイレクト

これが私が分析している活動ログです。呼び出し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人のユーザーについても同様です。スクリプトはデータベースから一部のユーザーとその呼び出し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)..

その通貨IDは最大5つです。最初の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

関連情報