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

我基本上希望将它在第 6 个管道(即 8 或 9)之后找到的任何内容输出到文本文件,根据我的应用程序,这是一个错误。

如果我不输出到 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 回答