4

how to find the last word in file even after word there are empty lines

the case

I tried this to find the last word

tail -1  /tmp/requests.txt

but no output

I try the following approach

 awk 'END {print $NF}'   /tmp/requests.txt

but no output

I capture the word only by tail -6 ( because the word was 6 empty lines before the end of the file

 tail -6  /tmp/requests.txt
 "IN_PROGRESS"

so what is the way to capture the last word in case we have empty space or not

expected results

 echo $Last_word
 IN_PROGRESS

3 Answers 3

7

Just start reading from the bottom and print the last word of the first line containing at least "something":

tac file | awk 'NF{print $NF; exit}'

For example:

$ cat -vet file     # note the spaces and tabs
hello$
bla ble bli$
   $
^I$
$ tac file | awk 'NF{print $NF; exit}'
bli

If you happen to not have tac, just use the same logic when reading the file normally:

awk 'NF{last=$NF} END{print last}' file

That is, store the last word whenever there is "something" in a line. Finally, print the stored value.

1
  • 2
    tac is the GNU equivalent of Unix tail -r. Jan 3, 2018 at 15:35
1

Keep track of the last word of the last non-empty line and print it at the end:

awk '/\S/{ s=$NF; } END{ print(s); }'

No need to keep the whole file in memory to print its lines in reverse order or anything like that.

0
sed -n '$p' example.txt | awk '{print $NF}'

This will get the last line of the file and display the last column in the last line.

1
  • If last line is blank, nothing to print
    – ctac_
    Jan 3, 2018 at 17:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .