HOWTO: See SOME lines from a file

Sometimes you want to see the head of a file. Sometimes you want to see the tail. Sometimes you just want to see some lines from a file.

The bash function below gives you some lines:

gmj@ed bash [master] $ cat <<END > lines.txt
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 10
> 11
> 12
> 13
> 14
> 15
> END
gmj@ed bash [master] $ source some.t
sh
gmj@ed bash [master] $
gmj@ed bash [master] $ some -2 lines.txt
14
15
gmj@ed bash [master] $ some -2 lines.txt
9
10
gmj@ed bash [master] $ some -2 lines.txt
6
7
gmj@ed bash [master] $ cat some.sh
function some {
    # Functon to print "some" lines of a file, like head or tail but, random start
    #
    # Usage: some [[-#] FILE]

    set -u; # be safe out there

    HOW_MANY=10 # Number of lines to print.  Default.
    FILE="/dev/stdin" # default


    if [ "$#" -eq 0 ]; then
        :
    elif [ "$#" -eq 1 ]; then
        if [[ "$1" =~ -[0-9] ]]; then
            HOW_MANY=`echo "$1" | sed 's/^-//'`
        else
            FILE="$1"
        fi

    elif [ "$#" -eq 2 ]; then
        if [[ "$1" =~ -[0-9] ]]; then
            HOW_MANY=`echo "$1" | sed 's/^-//'`
        else
            echo "some: Usage: some [-# [FILE]]"
            return
        fi

        FILE="$2"
    fi

    # Count the lines to bound display
    LINES=`wc -l $FILE | sed -e 's/ .*//'`

    # pick a random starting line at least HOW_MANY back from the end
    FIRST=$((1 + RANDOM % (LINES - HOW_MANY + 1 )))
    LAST=$((FIRST + HOW_MANY - 1))

    # Let's see some lines !
    awk "NR >= $FIRST && NR <= $LAST" $FILE
}

Post 26 #100DaysToOffload https://100daystooffload.com/


Comments