首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将文件填充到4字节边界

将文件填充到4字节边界
EN

Stack Overflow用户
提问于 2012-03-13 12:21:51
回答 3查看 1.4K关注 0票数 3

在linux bash中,如何使用4字节边界上的填充来连接文件。我有3个文件a.txt,b.txt,c.txt,我想把它们连接起来创建d.txt,每个元素文件都是从4字节的边界开始的。

代码语言:javascript
运行
复制
a.txt: 1 byte
b.txt: 2 bytes
c.txt: 4 bytes

d.txt should be
0-3: a.txt
4-7: b.txt
8-11: c.txt

如有任何建议,欢迎光临。谢谢并致以最良好的问候,Dien

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-13 14:58:25

代码语言:javascript
运行
复制
for i in {a..c}.txt
do
    cat $i
    head -c $(((4-$(stat -c %s $i)%4)%4)) /dev/zero
done >d.txt
票数 1
EN

Stack Overflow用户

发布于 2012-03-13 13:44:25

假设您希望填充空格,一个相对简单的解决方案是:

代码语言:javascript
运行
复制
perl -wpE 'BEGIN{ $/ = \4 } print " " x ( 4 - length )
    if length != 4' a.txt b.txt c.txt > d.txt
票数 3
EN

Stack Overflow用户

发布于 2012-03-13 16:11:42

如果您需要零字节填充,您可以对实际文件和/dev/zero使用head (以获得填充)。首先设置一些测试文件:

代码语言:javascript
运行
复制
pax> echo -n 1 >a.txt ; echo -n 12 >b.txt ; echo -n 1234 >c.txt

然后,下面的代码将为您提供所需的内容。

代码语言:javascript
运行
复制
pax> ( head -c1 a.txt ; head -c3 /dev/zero ;
       head -c2 b.txt ; head -c2 /dev/zero ;
       head -c4 c.txt ) | od -xcb
0000000    0031    0000    3231    0000    3231    3433
          1  \0  \0  \0   1   2  \0  \0   1   2   3   4
        061 000 000 000 061 062 000 000 061 062 063 064
0000014

您可以看到填充已被放置在输出流中。因此,执行此操作的脚本非常简单:

代码语言:javascript
运行
复制
( head -c1 a.txt ; head -c3 /dev/zero )  >d.txt
( head -c2 b.txt ; head -c2 /dev/zero ) >>d.txt
( head -c4 c.txt                      ) >>d.txt

或者,如果您并不真正关心填充区域中的内容,可以使用如下一行代码:

代码语言:javascript
运行
复制
cat [abc].txt | sed 's/^\(.\)\(..\)/\1___\2__/' >d.txt

这将生成一个包含以下内容的文件:

代码语言:javascript
运行
复制
1___12__1234
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9678329

复制
相关文章

相似问题

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