如何仅重定向命令产生的部分输出?

如何仅重定向命令产生的部分输出?

假设我运行一个名为的 Python 程序test.py,并想将其所有输出保存在一个文件中。
我们可以通过以下方式轻松实现python3 test.py > output.txt

然而,如果程序产生了一个很多行,在 bash 中减少写入文件的数据量的最有效方法是什么?

示例:保存程序输出的每隔一行,或者每一x行。

那么我怎样才能仅使用 bash 来完成此操作,最好是使用可以实时更新文件的方法?

编辑:-SteelDriver 的答案似乎有效。但是,有人能告诉我一个命令吗?该命令会x按原样打印前几行,但在x每行之后输出每y行并将它们存储在文件中?

答案1

您可以将程序的标准输出通过另一个程序作为过滤器 - 例如从第一行开始每 10 行写入

python3 test.py | sed -n '1~10p' > output.txt

或者

python3 test.py | awk '!((NR-1)%10)' > output.txt

如果你真的只需要使用 bash,那么你可以用 shell 循环替换 sed/awk,使用计数器和条件算术表达式来选择所需的行 - 但我不推荐这样做。例如为什么使用 shell 循环来处理文本被认为是不好的做法?

相关内容