如何将应用程序的输出分成几个文件?

时间:2015-11-13 11:40:15

标签: file shell file-io zsh

所以,我有一个应用程序。它不是我写的。它是一个命令行应用程序。它输出一些我能够写入文件的字符串,如:

BoundingRectangle

问题是输出太大而计算机内存不足。有可能做这样的事情:

anApp -input myFile.txt > myFileOutput.txt

因为它是一个笨拙的伪代码,我也在补充说明:

  1. 每100000行(例如)
  2. 创建一个名为newFile#的新文件,其中#是0到n之间的数字
  3. 将这100000行写入新创建的文件。
  4. 我认为可能还有另一种选择 - 保持anApp -input myFile.txt > i=0; for each 100000 lines; touch newFile%d $(i++); $cat 100000lines >> newFile%d $(i++); done 的输出为现金。但是,文件很大,它包含一些结果,如果它会丢失......这不是我想要发生的事情。

1 个答案:

答案 0 :(得分:1)

一种选择是使用split

anApp -input myFile.txt | split -l 100000 - myFileOutput

这将生成名称为myFileOutputaamyFileOutputab

的文件

要更好地控制输出文件的名称,可以使用awk:

NR % 100000 == 1 { close(outfile); outfile = sprintf("myFileOutput%02d", i++) }
{ print > outfile }

您可以将该脚本保存到文件中并按以下方式运行:

anApp -input myFile.txt | awk -f script.awk