我有一些用 ZPAQ 压缩的日志文件,每次需要 grep 事件时,我都不想将它们提取到磁盘。我想将它们提取到 stdout,这样我就可以用 gzcat 以与 GZ 压缩文件相同的方式处理输出:
# gzcat logfile.gz | grep foobarEVENT
# zpaq l logfile.zpaq
zpaq v6.42 journaling archiver, compiled Nov 20 2013
Reading archive logfile.zpaq
Ver Date Time (UT) Attr Size Ratio File
----- ---------- -------- ------ ------------ ------ -------
> 1 3873434570 0.0359 logfile
1 of 1 files shown. 3873434570 -> 139125985
Ver Last frag Date Time (UT) Files Deleted Original MB Compressed MB
---- -------- ---------- -------- ------ ------ -------------- --------------
1 1 1 0 3873.434670 139.125985
0.529 seconds
答案1
我能够通过典型的 stdout 传递未压缩的 zpaq 文件的方式是创建一个 fifo 命名管道并在一个进程中解压缩到该 fifo,然后在另一个进程中从 fifo 读取。
例如:
$ mkfifo data_logfile
$ zpaq x logfile -force -to data_ &
$ grep searchTeXt data_logfile > grep_results.txt