大きなファイルの途中を読む
1 TBのファイルがあります。バイト12345678901からバイト19876543212に読み取り、それを100 MB RAMのマシンの標準出力に出力したいと思います。 これを行うperlスクリプトを簡単に書くことができます。sysreadは700 MB / s(これは問題ありません)を提供しますが、syswriteは30 MB / sしか提供しません。より効率的なもの、できればすべてのUnixシステムにインストールされ、1 GB /秒のオーダーで配信できるものが望ましい。 私の最初のアイデアは: dd if=1tb skip=12345678901 bs=1 count=$((19876543212-12345678901)) しかし、それは効率的ではありません。 編集: syswriteを間違って測定した方法がわかりません。これにより、3.5 GB /秒が実現します。 perl -e 'sysseek(STDIN,shift,0) || die; $left = shift; \ while($read = sysread(STDIN,$buf, ($left > 32768 ? 32768 : $left))){ \ $left -= $read; syswrite(STDOUT,$buf); }' 12345678901 …