-2

我正在尝试从星号日志中实时提取电话号码。我正在使用tail这样做,问题出在我的理解是grep使用行缓冲并且由于tail没有结束它等到tail刷新但我需要通过系统的数字。这是我的代码

    tail -f /var/log/asterisk/messages | grep  @default | awk -F ' ' '{ print $11 }' | awk -F  '[^0-9]*' '{ print $2 }'

我还想确保它返回的模式也是一个 10 位数字,因为它返回较小的 1-6 位数字。

提前致谢

TrueY:很接近:这是一个示例,我试图过滤的数据

    [Jul 17 12:11:00] VERBOSE[13992] logger.c: [Jul 17 12:11:00]     -- Executing [h@default:1] DeadAGI("Local/91201xxx0249@default-abb1,2", "agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----0-----CANCEL----------") in new stack

我想要做的是在'@default'之前立即提取10位数的电话号码

4

1 回答 1

2

修改#2

其实tail不是实时的。默认情况下,它每 1 秒检查一次新值(通过-s选项更改)。

我稍微改进了凯文的回答。我假设第 12 个字段(而不是第 11 个)包含数字("DeadAGI("Local/91201xxx0249@default-abb1,2"," - 它不是 10 位数字!我假设它是):

tail -f /var/log/asterisk/messages | 
awk 'match($12, /[^0-9]91([0-9]{10})@default/, a) {print a[1]}'

仅当该行包含“@default”并且第 12 个字段正好包含 10 个连续数字时才会打印。

于 2013-07-17T11:00:37.437 回答