在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
如有任何建议,欢迎光临。谢谢并致以最良好的问候,Dien
发布于 2012-03-13 14:58:25
for i in {a..c}.txt
do
cat $i
head -c $(((4-$(stat -c %s $i)%4)%4)) /dev/zero
done >d.txt
发布于 2012-03-13 13:44:25
假设您希望填充空格,一个相对简单的解决方案是:
perl -wpE 'BEGIN{ $/ = \4 } print " " x ( 4 - length )
if length != 4' a.txt b.txt c.txt > d.txt
发布于 2012-03-13 16:11:42
如果您需要零字节填充,您可以对实际文件和/dev/zero
使用head
(以获得填充)。首先设置一些测试文件:
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
https://stackoverflow.com/questions/9678329
复制相似问题