我们有paste(1)
可以按行交错文件的功能。出于好奇,我想知道是否有一些二进制等价物。它应该将文件 A 的前 N 个字节复制到 stdout,然后将文件 B 的前 N 个字节复制到文件 A 的后 N 个字节,依此类推。
我想出的解决方案:
$/ = \512;
my @files = map { open( my $fh, "<", $_ ); $fh } @ARGV;
while (@files) {
@files = grep { my $c = <$_>; defined $c and print $c } @files;
}
答案1
你总是可以这样做:
paste -d '\0' <(xxd -p -c512 file1) <(xxd -p -c512 file2) | xxd -p -r > merged
和zsh
:
#! /bin/zsh -
zmodload zsh/system
size=${1?}; shift
fds=()
for file do
sysopen -u fd -- "$file" || exit
fds+=$fd
done
until
eof=true
for fd in $fds; do
sysread -s "$size" -i$fd -o1 && eof=false
done
$eof
do
continue
done