Re: cut off last lines of a document

From: Ralf Mardorf <ralf-mardorf_at_riseup.net>
Date: Mon, 04 Sep 2023 15:35:37 UTC
On Mon, 2023-09-04 at 16:39 +0200, Dag-Erling Smørgrav wrote:
> Pipe-friendly pure shell solution:
> 
> drop_last_three() {
>         local a b c d
>         read a
>         read b
>         read c
>         while read d ; do
>                 echo "$a"
>                 a="$b"
>                 b="$c"
>                 c="$d"
>         done
> }

Hi,

this way it takes quite a while to get the last 3 lines of the
Encyclopædia Britannica ;). Let alone that I don't understand how to use
your shell function without rewriting it.

   • rocketmouse@archlinux ~/Desktop 
   $ cat read3
   #!/bin/bash
   
   drop_last_three() {
           local a b c d
           read a
           read b
           read c
           while read d ; do
                   a="$b"
                   b="$c"
                   c="$d"
           done
   echo "$a"
   echo "$b"
   echo "$c"
   }
   
   drop_last_three < 2.txt
   • rocketmouse@archlinux ~/Desktop 
   $ cat 2.txt 
   1
   2
   3
   4
   5
   6
   7
   8
   9
   10
   • rocketmouse@archlinux ~/Desktop 
   $ time tail -3 2.txt 
   8
   9
   10
   
   real	0m0.010s
   user	0m0.002s
   sys	0m0.008s
   • rocketmouse@archlinux ~/Desktop 
   $ time ./read3 
   8
   9
   10
   
   real	0m0.017s
   user	0m0.008s
   sys	0m0.010s
   
The above test was done on a desktop PC. On an iPad Pro I'm using
https://ish.app/ . This "app" is Alpine Linux which is build around
busybox. It doesn't matter what shell I'm using (not necessarily
busybox), iSH is always very slow. Such a workaround IMO isn't a good
idea. I still recommend to let a script test what OS is used and to use
different commands depending on the OS.

Regards,
Ralf