填充文件到4字节边界

时间:2012-03-13 04:21:51

标签: linux bash shell

在linux bash中,我们如何在4字节边界上用填充连接文件。我有3个文件a.txt,b.txt,c.txt,并希望将它们连接起来创建d.txt,每个元素文件都是在4字节边界上启动的。

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

任何建议都表示赞赏。 谢谢和最诚挚的问候, 二烯

2 个答案:

答案 0 :(得分:2)

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

pax> echo -n 1 >a.txt ; echo -n 12 >b.txt ; echo -n 1234 >c.txt

然后以下代码将为您提供所需内容。

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

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

( 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

或者,如果你没有真正关心进入填充区域的内容,你可以使用如下单行代码:

cat [abc].txt | sed 's/^\(.\)\(..\)/\1___\2__/' >d.txt

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

1___12__1234

答案 1 :(得分:1)

for i in {a..c}.txt
do
    cat $i
    head -c $(((4-$(stat -c %s $i)%4)%4)) /dev/zero
done >d.txt