如何关闭grep line缓冲

时间:2013-07-16 16:11:42

标签: linux bash awk grep asterisk

我正在尝试从星号日志中实时拨打电话号码。我正在使用tail这样做,问题来自我所理解的是grep使用行缓冲并且因为尾部没有结束它等到尾部冲洗但我需要数字,因为它来自系统。这是我的代码

    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位数的电话号码

1 个答案:

答案 0 :(得分:2)

<强>改性#2

实际上tail不是实时的。它默认每1秒检查一次新值(按-s选项更改)。

我稍微提高了Kevin的答案。我假设第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个连续数字时才会打印。