在linux bash中,我們如何在4字節的邊界上使用填充連接文件。我有3個文件a.txt,b.txt,c.txt,並且想要連接它們以創建d.txt,每個元素文件都以4字節的邊界開始。填充文件到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
任何建議表示讚賞。 感謝和問候, 奠
在linux bash中,我們如何在4字節的邊界上使用填充連接文件。我有3個文件a.txt,b.txt,c.txt,並且想要連接它們以創建d.txt,每個元素文件都以4字節的邊界開始。填充文件到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
任何建議表示讚賞。 感謝和問候, 奠
假設你想用空格墊,一個相對簡單的解決方法是:
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
不要這些文件只具有每一行或者是'a.txt'(例如)100線每一個字符的? – paxdiablo 2012-03-13 04:29:41
Hi Paxdiablo,每個成員文件也是二進制文件 – 2012-03-13 07:04:00
感謝大家花時間回答! – 2012-03-13 13:43:24