如何拆分标准输出以转到多个输出文件?

如何拆分标准输出以转到多个输出文件?

比如说,我有一个命令command可以将大量行打印到标准输出:

line1
line2
.....
lineN

我想将输出保存到磁盘,但不是作为单个文件,而是作为一系列文件,每个文件都有 1000 行 stdout:

file0001.txt:
-------------
line1
....
line1000

file0002.txt:
-------------
line1001
....
line2000

etc

我尝试用谷歌搜索答案,但每次谷歌都会提示我输入tee命令,但在这种情况下这毫无用处。可能是我输入了错误的查询。

答案1

保存文件后,您始终可以split根据行数将文件分成文件块或多个文件。

split -l 1000 output_file

或者更好的是尝试一下

command | split -l 1000 -

这会将输出流分割成每 1000 行的文件(默认为 1000 行,没有 -l 选项)。

以下命令将为您提供额外的灵活性,可以在生成输出并拆分以存储到文件中时生成的文件名中添加或强制添加前缀。

command | split -l 1000 - small-

答案2

您可以使用 bash 脚本lines.bash

#!/bin/bash
a=0
while IFS='' read -r line
do
  printf -v filename "%04d.txt" "$((a++/1000))"
  echo "$line" >> $filename
done

并将其用作:

cat long_file.txt | bash lines.bash

我注意到的唯一问题是*登录long_file.txt(有人可以纠正它)。

相关内容