【发布时间】:2020-09-18 22:35:49
【问题描述】:
我必须使用我的 Linux 机器处理文件。
当我尝试将输出写入 csv 文件时,然后将其 gzip 压缩到同一行脚本中:
processing > output.csv | gzip -f output.csv
我收到“文件意外结束”错误。即使我使用 Linux 机器下载文件,我也会遇到同样的错误。
当我不通过终端(或单行)gzip 时,一切正常。
为什么命令都在一行时会这样失败?
【问题讨论】:
我必须使用我的 Linux 机器处理文件。
当我尝试将输出写入 csv 文件时,然后将其 gzip 压缩到同一行脚本中:
processing > output.csv | gzip -f output.csv
我收到“文件意外结束”错误。即使我使用 Linux 机器下载文件,我也会遇到同样的错误。
当我不通过终端(或单行)gzip 时,一切正常。
为什么命令都在一行时会这样失败?
【问题讨论】:
当您使用 > 运算符重定向进程的 IO 时,其输出不能被管道使用(因为不再有“输出”可通过管道传输)。你有两个选择:
processing > output.csv &&
gzip output.csv
将程序未处理的输出写入文件output.csv,然后在第二个任务中压缩此文件,将其替换为output.gz。根据数据量,这可能不可行(存储要求是完整的未压缩输出加上压缩大小)
processing | gzip > output.csv.gz
这将在线压缩您的进程的输出并将其直接写入输出文件,而不会将未压缩的输出存储在中间文件中。
【讨论】:
你应该删除> output.csv
您可以:
| 或:对于同一个流(stdout)
您可以将错误从标准错误重定向到带有2>errors.txt 的文件,否则它们将显示在屏幕上
【讨论】:
tee或stackoverflow.com/questions/60942/…