首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分裂成固定的序列并去掉额外的

问分裂成固定的序列并去掉额外的
EN

Stack Overflow用户
提问于 2015-07-05 13:56:41
回答 1查看 55关注 0票数 0

我想限制所有的文件是相同的固定长度,但最后一项可以是任何可变的大小,但不超过557。这意味着文件数量可以由命令-n的标志split来确定。

代码1(确定)

代码语言:javascript
复制
$ seq -w 1 1671 > /tmp/k && gsplit -n15 /tmp/k && wc -c xaa && wc -c xao
557 xaa
557 xao

其中xaa是序列的第一个文件,而xao是最后一个文件。我将序列增加一个单位,但它在最后一个文件xao中导致5个单位增加(557->562),我不明白:

代码语言:javascript
复制
$ seq -w 1 1672 > /tmp/k && gsplit -n15 /tmp/k && wc -c xaa && wc -c xao
557 xaa
562 xao

为什么一个单位依次增加最后一个项目(xao)增加5个单位?

代码2

代码语言:javascript
复制
$ seq -w 1 1671 | gsed ':a;N;$!ba;s/\n//g' > /tmp/k && gsplit -n15 /tmp/k&& wc -c xaa && wc -c xao
445 xaa
455 xao
$ seq -w 1 1672 | gsed ':a;N;$!ba;s/\n//g' > /tmp/k && gsplit -n15 /tmp/k&& wc -c xaa && wc -c xao
445 xaa
459 xao

因此,将整个长度增加一个序列(4个字符)将导致4个字符的增加(455 -> 459),而第一个代码的增加为5个字符。

代码3

现在让我们用seq -w 0 0.0001 1 | gsed 's/\.//g'将每个序列单元固定为4个字符

代码语言:javascript
复制
$ seq -w 0 0.0001 1 | gsed 's/\.//g' |  gsed ':a;N;$!ba;s/\n//g' > /tmp/k && gsplit -n15 /tmp/k&& wc -c xaa && wc -c xao
3333 xaa
3344 xao
$ seq -w 0 0.0001 1.0001 | gsed 's/\.//g' |  gsed ':a;N;$!ba;s/\n//g' > /tmp/k && gsplit -n15 /tmp/k&& wc -c xaa && wc -c xao
3334 xaa
3335 xao

因此,增加一个字符的序列增加xaa的单位,但减少xao 9个单位。这种行为是我不太符合逻辑的。

如何首先限制序列长度,例如将其固定在557,然后确定成功文件的文件数量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-05 22:07:04

原始答案-代码1

因为seq -w 1 1671每数字生成5个字符-4位数字和1条换行符.因此,向输出中添加一个数字会使输出增加5个字节。

额外答案-代码2

您已经要求GNU split (又名gsplit)将文件输入分成15个块。它尽了最大的努力来平衡这些价值。但是,当字节总数不是15的倍数时,它所能做的事情是有限度的。有一些选项可以控制发生的事情。

但是,在基本形式中,-n 15选项意味着前14个输出文件每个得到445个字符,最后一个输出文件得到455个字符,因为输出文件中有6685 = 445 * 15 +10个字符。当您向文件中再添加4个字符(因为您删除了换行符)时,最后一个文件将得到另外4个字符(因为6689 = 445 * 15 + 14)。

额外答案-密码3

首先,来自seq -w 0 0.0001 1的输出如下所示:

代码语言:javascript
复制
0.0000
0.0001
0.0002
…
0.9998
0.9999
1.0000

因此,在使用第一个sed编辑输出后,将出现从00000到10000的数字,每行一个,每行有6个字符(包括换行符)。第二个sed再次删除换行符。

在/tmp/k中,一行有50006字节。这等于15 * 3333 + 11,因此是第一个输出。第二个变体在/tmp/k中有50011个字节,为15 * 3334 + 1,因此只有一个。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31231098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档