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

관련 정보