![고정 크기 청크로 두 개의 바이너리 파일을 인터리브합니다.](https://linux55.com/image/185855/%EA%B3%A0%EC%A0%95%20%ED%81%AC%EA%B8%B0%20%EC%B2%AD%ED%81%AC%EB%A1%9C%20%EB%91%90%20%EA%B0%9C%EC%9D%98%20%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%B8%ED%84%B0%EB%A6%AC%EB%B8%8C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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