Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux中基于内容和行数拆分文件_Linux_File_Split_Command - Fatal编程技术网

linux中基于内容和行数拆分文件

linux中基于内容和行数拆分文件,linux,file,split,command,Linux,File,Split,Command,我有这样的文本文件,有超过1200万行 22 start of first batch 33 some more text 2 55 some data 1 66 more data 1 55 some data 2 66 more data 2 99 end of first batch ... 22 start of Nth batch 33 some more text N 55 some data N 66 more data N 55 some data N 66 more data

我有这样的文本文件,有超过1200万行

22 start of first batch
33 some more text 2
55 some data 1
66 more data 1
55 some data 2
66 more data 2
99 end of first batch
...
22 start of Nth batch
33 some more text N
55 some data N
66 more data N
55 some data N
66 more data N
99 end of Nth batch
在此文本文件中,有多个批次。每个批中还有多个事务。每批最后一笔交易为99笔。 我想将此文件拆分为多个文件,但有以下限制:

  • 每个文件可以包含大约100000条记录
  • 每个文件应包含批次的完整详细信息。例如,如果在一个文件中,我们已经添加了100000行,但插入的最后一行仍然不是以99开头的,那么我们将继续在该文件中插入,直到得到99行

  • 这可以在linux中通过单行命令完成吗?

    除了使用
    csplit
    之外,请使用awk。将输出文件名存储在变量中。写入输出并计算行数。当您匹配
    ^99
    并且输出超过100000行时,请在输出文件名中增加一个计数器。为什么要将重点放在一行上?我认为用你喜欢的语言写一个漂亮的小脚本要快得多;而且会更容易阅读和维护。。。写下300列复杂的一行代码3分钟后没有人理解它的意义是什么?我试图从java调用这个linux命令。java中的文件拆分将非常耗时。因此,我有一个java代码,它将首先通过运行系统命令拆分文件,然后并行处理每个文件。这就是为什么我想在一行中做这件事。不确定是否有其他方法。“java中的文件拆分太耗时了。”那么您就做错了。除了使用
    csplit
    ,请使用awk。将输出文件名存储在变量中。写入输出并计算行数。当您匹配
    ^99
    并且输出超过100000行时,请在输出文件名中增加一个计数器。为什么要将重点放在一行上?我认为用你喜欢的语言写一个漂亮的小脚本要快得多;而且会更容易阅读和维护。。。写下300列复杂的一行代码3分钟后没有人理解它的意义是什么?我试图从java调用这个linux命令。java中的文件拆分将非常耗时。因此,我有一个java代码,它将首先通过运行系统命令拆分文件,然后并行处理每个文件。这就是为什么我想在一行中做这件事。不确定是否还有其他方法。“用java进行文件拆分太耗时了。”那么你就做错了。