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?
* AWK* sedLinuxShell Scripting

Avatar of undefined
Last Comment
MURUGESAN N

8/22/2022 - Mon
arnold

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
tfewster

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
MURUGESAN N

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
MURUGESAN N

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

Your help has saved me hundreds of hours of internet surfing.
fblack61