#! perl -slw use strict; our $BUFN //= 1024; $BUFN *= 4096; our $SIG //= '68 64 76 64 00 00 00 11 64 61 74 61 00 00 00 15 00 00 00 00 02 00 00 00'; $SIG =~ tr[ ][]d; $SIG = pack 'H*', $SIG; open my $in, '<:raw', $ARGV[0] or die $!; my( $offset, $buffer ) = ( 0, '' ); while( sysread( $in, $buffer, $BUFN, length $buffer ) ) { my $pos = 1+index( $buffer, $SIG ); if( $pos ) { print "Found signature at offset: ", $offset + $pos - 1; exit; } $offset += length( $buffer ) - length( $SIG ); $buffer = substr $buffer, - length $SIG; } close $in; print "Signature not found"; __END__ 02/02/2015 15:42 10,737,418,241 big.csv C:\test>junk71 -BUFN=4096 -SIG="52 5f d7 58 22 0d 0a 61 68 73 68 77 65 2c 38 30 33 37 31 37 38 35 2c 46" big.csv Found signature at offset: 1073741817