2016-11-09 77 views
0

不断然后解码打印模式从解码文件我该解码二进制日志,以ASCII格式 从ASCII格式文件的命令,我需要用awk到grep一些patters,并打印出来运行AWK正在用awk

如何才能做到这一点?

我试过的是如下在shell脚本中,它不起作用。

command> file.txt | awk/pattern/| SED /模式/

我也需要命令不间断的解码文件,并记录在案,印刷图案被更新提前

+0

'...> file.txt | awk ...'是一个错误,你已经将'cmd'的输出重定向到一个文件,你不能将它重定向到'|'。你不会说如果你真的需要'file.txt'。所以最简单的是'cmd |解码| awk ...'awk可以做任何'sed'可以做的事情。对于一次性使用,请继续追加sed。对于那些将要投入使用多年的东西,找出如何在'awk'中完成所需的替换并保存一个进程。祝你好运。 – shellter

+0

另外这个Q非常含糊。读者希望看到可重复的案例和证据。请阅读http://stackoverflow.com/help/mcve并包含示例输入,预期输出,实际代码,当前输出,错误消息以及您对发生问题的意见。祝你好运。 – shellter

回答

1

命令不间断的解码文件

感谢,并保持印刷图案

第一个问题是如何连续体现自己。大多数日志文件都是通过附加到 - 我们的目的,通过一些未知的外部进程 - 而周期性地旋转。如果你要连续解码它们,你将不得不跟踪日志旋转。

command是否可以连续解码,或者您是否打算定期重新运行command,从哪里拿起你离开的地方?如果是后者,你可能会改为尝试一些变化:

cat log | command | awk 

如果不能做到,你必须记录下每次迭代结束,是这样的:

touch pos 
while -f pos 
do 
    command | awk -v status=pos script.awk > output || rm pos 
done 

其中script.awk跳过输入,直到NR等于pos文件中的数字值。然后它处理直到EOF的行,并用其最终的NR覆盖pos。出错时,它调用exit 1,并且文件被删除,循环终止。

我建议您忽略sed,并将所有模式匹配逻辑放在一个awk脚本中。这将更容易理解和更便宜的执行。

+0

谢谢詹姆斯。命令可以连续解码 – user2074894

+0

我想出了这样做的方法。我把命令放在无限while循环中就足够了 – user2074894