-2

アスタリスクログからリアルタイムで電話番号を抜き取ろうとしています。私はテールを使用しています。問題は、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 桁の電話番号を取得することです

4

1 に答える 1

2

修正#2

実はtailリアルタイムではありません。デフォルトでは1秒ごとに新しい値をチェックします(-sオプションで変更)。

ケビンの答えを少し改善しました。12 番目のフィールド (11 番目ではない) に数字が含まれていると仮定します ("DeadAGI("Local/91201xxx0249@default-abb1,2"," - 10 桁ではありません! 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 に答える