在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
任何建议都表示赞赏。 谢谢和最诚挚的问候, 二烯
答案 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