微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – Unix:如何将文件拆分成相等的部分,而不会打断单个行?

我想知道是否可以将一个文件拆分为相等的部分(编辑:=所有相等,除了最后一个),而不打破行?在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行),并拆分为五个文件,你很可能不会得到每一个文件中的四行。

原文地址:https://www.jb51.cc/bash/392508.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐