我如何维护程序的可读输出,同时将相同的输出放入压缩文件、gzip 或其他文件,以便以后可以解析它?
我运行了一个命令,该命令生成了很多相同的明文行,这些行应该很容易压缩,但我还想监视该命令的输出。我知道我可以使用tee
打印,然后将 stdin 放入文件中。但文件很大(250MB+)。我还知道我可以使用gzip
将 stdin 压缩到文件中,但这样我就看不到屏幕上的任何输出,并且 gzip 的--stdout
标志只会将压缩数据转储到 stdout,这不是我想要的。
举个例子
python -c 'for i in range(0, 100): print("A" * 120)' | gzip --best > A.log.gz
但我也想看到A
s 打印到控制台。
答案1
您可以通过组合tee
和流程替代:
python -c 'for i in range(0, 100): print("A" * 120)' |
tee >( gzip > compressed.gz)
构造>()
是一种进程替换,它允许您将命令视为文件。在这种情况下,打开一个文件进行写入(<()
将打开进行读取)。上面的命令将打印到标准输出(因为这是tee
默认操作)和重定向到特殊的“文件” gzip > compressed.gz
,意味着它将打印到该文件,从而传递所有输出gzip
并最终传递到压缩文件compressed.gz
。