NoN*_*ame 3 linux bash awk grep tail
在一个特殊的控制台上,我喜欢从/ var/log/syslog中过滤一些信息.这不是很棘手:
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";}'
Run Code Online (Sandbox Code Playgroud)
但现在我想通过grep管道这个特殊领域.只添加一个"| grep Fieldname"不起作用,即使不是grep first,awk以后(这会更有意义).
你能给我一个提示吗?
不要使用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";}'
Run Code Online (Sandbox Code Playgroud)
如果你真的需要使用grep,你可以使用该--line-buffered选项,因此它不会缓冲输出.
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";}'
Run Code Online (Sandbox Code Playgroud)
如果要grep输出awk,则应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
Run Code Online (Sandbox Code Playgroud)