in reply to truncate a file from top

Reading the last X bytes is easy enough, an if your lines are fixed length this means the last N lines is equivalent

# Generate some test data perl -e'for(0..9){@a=(A..Z,a..z," ",0..9);print$a[rand($#a+1)]for 1..8 +0;print$/}'>testdata # Grab the last 243 bytes == last 3 lines (80 chrs + \n) perl -le 'open F,"testdata";$a=243;seek F,-$a,2;sysread F,$data,$a;pri +nt$data;' gaNLTPyYjzh o0SFnuiNw18l9rpJvHXOcctK2gpLIZzODQou qal15OgfCEQsVGaQ3Ojmb +5h06pYM3x7 M0GgGwIdqqVmz1D5cWrOwC 0bzvp7bChgOtlzf1TE2 yh77hCIYhricePIH0VxiKHdv3Ye +a3zkN4aKZ6 sPBR0bryMtGTcGUk87B7UQmEpficHPy0rcjuwYTFyIbweuOcnxtyMpIm2BMcWJa30LVpFQ +5nLnJesQ4a # check it is true tail -3 testdata gaNLTPyYjzh o0SFnuiNw18l9rpJvHXOcctK2gpLIZzODQou qal15OgfCEQsVGaQ3Ojmb +5h06pYM3x7 M0GgGwIdqqVmz1D5cWrOwC 0bzvp7bChgOtlzf1TE2 yh77hCIYhricePIH0VxiKHdv3Ye +a3zkN4aKZ6 sPBR0bryMtGTcGUk87B7UQmEpficHPy0rcjuwYTFyIbweuOcnxtyMpIm2BMcWJa30LVpFQ +5nLnJesQ4a

update

that seek should be sysseek to bypass buffering.

Cheers,
R.