2012-11-06 21 views
1

和我与在Windows Grepping射程和实时输出到我运行的尾巴和grep从Server 2003的一个txt文件

一个有问题的:搜索一定范围内(那管在日志文件中我分隔读书如:

|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提示窗口中实时正确显示它们

任何人都可以帮助我吗?将不胜感激!

干杯

的NiGe

回答

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),冒号(:)和整行($0)th在包含匹配的字段。然后next突破循环以读取下一行输入。 HTH。

编辑:

tail -f 20121106.log | perl -F\\\| -ane 'for ($i=6; $i<[email protected]; $i++) { if ($F[$i]=="8" || $F[$i] == "9") { print "$.:$_"; last } }' >> output.txt 
+0

感谢史蒂夫,GNU awk中没有设置在包装盒上是否有任何其他方式做到这一点? – user1802739

+0

@ user1802739:简单安装'awk'可能更容易。在使用'Perl'之后,你可以像这样使用'grep':'grep -n -e“| 8 |” -e“| 9 |”',但它无法检查值是否出现在第六个管道之后。可能还有其他方法可以做到这一点,但他们都会有些ha and,可能会涉及某种临时文件。 HTH。 – Steve

+0

@ user1802739:我为您添加了一个'Perl'解决方案。 HTH。 – Steve

相关问题