首页 > 解决方案 > 监视日志文件中的字符串,然后从同一行创建变量以处理所述文件

问题描述

我正在尝试处理音频日志以从 Asterisk 存档。使用 Asterisk 我有一个日志文件 (20190625.txt),看起来像这样,有 2 个记录:

20190625201018,RXKEY,1999
20190625201018,TXKEY,MAIN
20190625201018,RXUNKEY,1999
20190625201019,RXKEY,1999
20190625201021,RXUNKEY,1999
20190625201023,TXUNKEY,MAIN
20190625201115,RXKEY,1999
20190625201115,TXKEY,MAIN
20190625201115,RXUNKEY,1999
20190625201115,RXKEY,1999
20190625201127,RXUNKEY,1999
20190625201133,TXUNKEY,MAIN

当我运行脚本时,我不能简单地处理音频文件和转码,因为文件会在录制开始时出现,并在完成写入之前显示。但是,一旦记录了 RXUNKEY, 1999,文件就完成了写入。所以我想监视日志文件,当发现 RXUNKEY, 1999 时,我需要将同一行中的文件时间戳存储为变量($file)。

然后,我将使用 FFMPEG 处理文件,将 $file.WAV 转换为 $file.MP3,并将其存储在不同的目录中。然后清除原始 .WAV 并删除日志文件的内容。

Inotifywait 在此系统上不可用。

标签: shellawkscriptinggrep

解决方案


也许像

tail -f 20190625.txt | awk -F, '$2 == "RXUNKEY" && $3 == 1999 { print $1; fflush() }' |
while read file; do
  # Work with $file
done

推荐阅读