2016-03-22 3 views
1

特別なコンソールで、私は/ var/log/syslogからいくつかの情報をフィルタリングするのが好きです。それは本当に難しいことではありませんでした:awkとgrepを通してtail出力を "フィルタリング"するには?

tail -f /var/log/syslog | awk '{print $2,$1,$9,$3,"\033[1;36m"$17 "\033[0m","\033[1;33m"$23 "\033[0m","\033[1;36m"$19 "\033[0m","\033[1;33m"$24 "\033[0m","\033[1;38m"$26"\033[0m","\033[1;32m"$13"\033[0m","\033[1;31m"$20 "\033[0m";}' 

しかし、私はこれを特別なフィールドのためにgrepを通してパイプしたいと思います。 "| grep Fieldname"を追加するだけで、grepではなく、awkが後で(意味が分かります)動作しません。

私にヒントを教えてください。

答えて

3

grepを使用しないでください。パターンマッチはawkにしてください。

tail -f /var/log/syslog | awk '/Fieldname/ {print $2,$1,$9,$3,"\033[1;36m"$17 "\033[0m","\033[1;33m"$23 "\033[0m","\033[1;36m"$19 "\033[0m","\033[1;33m"$24 "\033[0m","\033[1;38m"$26"\033[0m","\033[1;32m"$13"\033[0m","\033[1;31m"$20 "\033[0m";}' 

あなたは本当にそれが出力をバッファリングしないように、あなたが--line-bufferedオプションを使用することができ、grepを使用する必要がある場合。

tail -f /var/log/syslog | grep --line-buffered Fieldname | awk '{print $2,$1,$9,$3,"\033[1;36m"$17 "\033[0m","\033[1;33m"$23 "\033[0m","\033[1;36m"$19 "\033[0m","\033[1;33m"$24 "\033[0m","\033[1;38m"$26"\033[0m","\033[1;32m"$13"\033[0m","\033[1;31m"$20 "\033[0m";}' 

あなたがawkの出力をgrepしたい場合は、すぐにバッファをフラッシュするために、それぞれの行を印刷した後fflush()を使用する必要があります。

tail -f /var/log/syslog | awk '{print $2,$1,$9,$3,"\033[1;36m"$17 "\033[0m","\033[1;33m"$23 "\033[0m","\033[1;36m"$19 "\033[0m","\033[1;33m"$24 "\033[0m","\033[1;38m"$26"\033[0m","\033[1;32m"$13"\033[0m","\033[1;31m"$20 "\033[0m"; fflush();}' | grep Fieldname 
+0

こんにちはBarmar、 '/ Fieldname /'は私が必要とするものです。どうもありがとうございました! :-) – NoName

関連する問題