bash – Unix:如何将文件拆分成相等的部分,而不会打断单个行?
发布时间:2020-12-15 16:50:31 所属栏目:安全 来源:网络整理
导读:我想知道是否可以将一个文件拆分为相等的部分(编辑:=所有相等,除了最后一个),而不打破行?在Unix中使用split命令,行可能被破坏一半。有一种方法可以说,把文件拆分成5个相等的部分,但它仍然只包括整行(如果一个文件是一个更大或更小的没有问题)?我知道
我想知道是否可以将一个文件拆分为相等的部分(编辑:=所有相等,除了最后一个),而不打破行?在Unix中使用split命令,行可能被破坏一半。有一种方法可以说,把文件拆分成5个相等的部分,但它仍然只包括整行(如果一个文件是一个更大或更小的没有问题)?我知道我可以计算行数,但我必须这样做很多文件在一个bash脚本。非常感谢!
如果你意味着相等的行数,split有一个选项:
split --lines=75 如果你需要知道什么75应该真正为N等份,它的: lines_per_part = int(total_lines + N - 1) / N 其中可以使用wc -l获得总线。 有关示例,请参阅以下脚本: #!/usr/bin/bash # Configuration stuff fspec=qq.c num_files=6 # Work out lines per file. total_lines=$(wc -l <${fspec}) ((lines_per_file = (total_lines + num_files - 1) / num_files)) # Split the actual file,maintaining lines. split --lines=${lines_per_file} ${fspec} xyzzy. # Debug information echo "Total lines = ${total_lines}" echo "Lines per file = ${lines_per_file}" wc -l xyzzy.* 这输出: Total lines = 70 Lines per file = 12 12 xyzzy.aa 12 xyzzy.ab 12 xyzzy.ac 12 xyzzy.ad 12 xyzzy.ae 10 xyzzy.af 70 total 更新版本的拆分允许您使用-n / – number选项指定多个CHUNKS。因此,您可以使用类似: split --number=l/6 ${fspec} xyzzy. (这是椭圆六角,意思是线,而不是一斜线六)。 这将给你在大小方面大致相等的文件,没有中线分裂。 我提到最后一点,因为它不给你在每个文件中大致相同的行数,更多相同的字符数。 因此,如果您有一个20个字符的行和19个1字符行(总共20行),并拆分为五个文件,你很可能不会得到每一个文件中的四行。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |