Is there any way to make the cut command read the last field only?
No cut
can't do that. You could use two rev
commands, like
echo 'foo bar baz' | rev | cut -d' ' -f1 | rev
but it's usually easier to use awk
:
echo 'foo bar baz' | awk '{print $(NF)}'
You can do this using only shell, no external tool is needed, using Parameter Expansion:
${var##* }
var##*
will discard everything from start up to last space from parameter (variable) var
.
If the delimiter can be any whitespace e.g. space or tab, use character class [:blank:]
:
${var##*[[:blank:]]}
Example:
$ var='foo bar spam egg'
$ echo "${var##* }"
egg
$ var=$'foo\tbar\tspam\tegg'
$ echo "$var"
foo bar spam egg
$ echo "${var##*[[:blank:]]}"
egg
I personally like Florian Diesch answer. But there is this way too.
a=$(echo "your string here" | wc -w)
echo "your string here" | cut -d' ' -f$a
Explanation:
wc -w
gives the number of words. and cut
cuts the last word
EDIT:
I figured another way of Doing it:
echo "Any random string here" | tac -s' ' | head -1