1

Server 2003 から tail と grep を実行していますが、問題が発生しています

a:範囲を検索しています(私が読んでいるログファイルでパイプで区切られている例:

|100|2012/11/04 23:18:23|error string here|service name|host name|9|0|||0|824|3132|

b: 一致した行をリアルタイムでテキスト ファイルに出力する

これは私が使用しているものです:

tail -f 20121106.log | grep -n "|8-9|" >> output.txt

私は基本的に、8 または 9 である 6 番目のパイプの後に見つかったものをテキスト ファイルに出力しようとしていますが、これは私のアプリケーションによるとエラーです。

txt ファイルに出力せずに "|8|" を探す場合 または "|9|" (範囲を機能させることができないので、どちらかを行う必要があります)その後、cmdプロンプトウィンドウにリアルタイムで正しく表示されます

誰でもこれで私を助けることができますか? 感謝します!

乾杯

にげ

4

1 に答える 1

0

あなたはこれを行うことができますGNU awk

tail -f 20121106.log | awk -F "|" '{ for(i=7; i<=NF; i++) if ($i=="8" || $i == "9") { print NR ":" $0; next } }' >> output.txt

簡単な説明:

6 番目のパイプの後にフィールドをループします。フィールドが「8」または「9」の場合は、一致するフィールドを含む行番号 ( NR)、コロン ( :)、および行全体 ( ) を出力します。その後、ループから抜け出し、次の入力行を読み取ります。HTH。$0next

編集:

tail -f 20121106.log | perl -F\\\| -ane 'for ($i=6; $i<=@F; $i++) { if ($F[$i]=="8" || $F[$i] == "9") { print "$.:$_"; last } }' >> output.txt
于 2012-11-06T13:06:54.590 に答える