在linux bash中,我们如何在4字节的边界上用padding连接文件。 我有3个文件a.txt,b.txt,c.txt,并且想要连接它们来创buildd.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
任何build议表示赞赏。 感谢和最好的问候,Dien
for i in {a..c}.txt do cat $i head -c $(((4-$(stat -c %s $i)%4)%4)) /dev/zero done >d.txt
假设你想填充空格,一个相对简单的解决方案是:
perl -wpE 'BEGIN{ $/ = \4 } print " " x ( 4 - length ) if length != 4' a.txt b.txt c.txt > d.txt
如果你需要零字节的填充,你可以使用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