Link to home
Create AccountLog in
Avatar of Jasmin shahrzad
Jasmin shahrzad

asked on

sed/awk/tail: how to read 3'de last line

how to put a variable to 3'te las t line from file?
i have a file which last 3 line is
...
...
12   <-- 3'de last line
...    
sql>      <-- last line
how to put a variable to read number 12 from file?
Avatar of arnold
arnold
Flag of United States of America image

Is the opposite command of tail (head) an option?
You could use wc to count the number of lines, then seek move to ......
ASKER CERTIFIED SOLUTION
Avatar of tfewster
tfewster
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
Create an account to see this answer
Signing up is free. No credit card required.
Create Account
Right way which I used to assign one command output to a variable:
        InputFile="./Jasmin_shahrzad.txt"
        if test -f "$InputFile"
        then
                LAST_Third_LINE=''`/usr/bin/tail -3 "$InputFile" |/usr/bin/head -1`''
                echo $LAST_Third_LINE
        else
                if test -d "$InputFile"
                then
                        echo "Input file $InputFile is a directory"
                        echo "Provide valid input file"
                else
                        echo "$InputFile No such file"
                fi
        fi

Open in new window

Reason for using full path of any executable command:
unset -f tail
tail ()
{
         echo Use full path of command /usr/bin/tail $@
         echo instead of using tail $@
         echo Returning \$? to 12
         return 12
}

Open in new window

$ tail -f Dinesh_Murugesan.txt
           tail -f Dinesh_Murugesan.txt
           Use full path of command /usr/bin/tail -f Dinesh_Murugesan.txt
           instead of using tail -f Dinesh_Murugesan.txt
           Returning $? to 12
$ echo $?
12
$ unset -f tail
$ tail -f Dinesh_Murugesan.txt
       tail: cannot open 'Dinesh_Murugesan.txt' for reading: No such file or directory
       tail: no files remaining
Same using /bin/awk
Following codes assumes handled all exceptions:
/bin/awk '{ EachLine[NR]=$0;}END { print EachLine[NR-2]}' Jasmin_shahrzad.txt

Open in new window


using /bin/sed
NUMOFLINES=''`/usr/bin/wc -l  Jasmin_shahrzad.txt | /bin/sed "s/ .*//;"`''
REQUIRED_LINE_NUM=''`/usr/bin/expr $NUMOFLINES - 3 + 1`''
/bin/sed "$REQUIRED_LINE_NUM"'!d' Jasmin_shahrzad.txt

Open in new window