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

nee*_*l g 1 python command-line bash io

假设我运行了一个名为 python 的程序,test.py并希望将它的所有输出保存在一个文件中。
我们可以通过python3 test.py > output.txt

但是,如果程序产生很多行,那么 bash 中减少写入文件的数据量的最有效方法是什么?

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

那么我怎样才能只使用 bash 来做到这一点,最好是实时更新文件呢?

编辑:- SteelDriver 的回答似乎有效。但是,有人还可以告诉我一个命令,x它按原样打印第一行,但在行之后x,输出每一y行并将它们存储在文件中?

ste*_*ver 5

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

python3 test.py | sed -n '1~10p' > output.txt
Run Code Online (Sandbox Code Playgroud)

或者

python3 test.py | awk '!((NR-1)%10)' > output.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 看看 `man head` 和 `man tail` 以及更多处理文本输出的 bash 工具。 (2认同)