我正在尝试从星号日志中实时拨打电话号码。我正在使用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位数的电话号码
答案 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个连续数字时才会打印。