![grep 및 csv로 리디렉션](https://linux55.com/image/181349/grep%20%EB%B0%8F%20csv%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98.png)
이것이 제가 분석 중인 활동 로그입니다. 호출 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