How do I use cut to separate by multiple whitespace?
If we use tr
command along with squeeze option (-s
flag ) to convert all multiple consecutive spaces to a single space and then perform cut
operation with space as delimiter – we can access the required column carrying the numbers.
Refer to the code snipped bellow:
cat file | tr -s ' ' | cut -d ' ' -f 8
To answer your question literally:
sed 's/ */:/g' | cut -d : -f 5
or
awk -F ' +' '{print $5}'
But that won't do if the number in brackets reaches 10, etc. If you're only interested in the numbers, you could remove everything else.
sed 's/[^.0-9][^.0-9]*/:/g' | cut -d : -f 6
These commands will all print the last column of a space separated file:
awk '{print $NF}' file
in
awk
,NF
is the number of fields and$NF
is the last field.perl -lane 'print $F[$#F]' file
-a
splits the file on whitespace into the array@F
,$#F
is the number of elements in the array so$F[$#F]
is the last element. The-n
means read the file given on the command line and apply the script passed with-e
to each line.-l
just adds a newline character (\n
) to eachprint
statement.sed 's/.* //g'
a simple regular expression that matches everything to the last space and deletes it, leaving only the last column.
rev file | cut -d' ' -f 1 | rev
rev
reverses its output so the last field is the first,cut
with delimiter space to print it andrev
to reverse the text back to normal. This won' t work if you have consecutive whitespace.
Based on your input, I am guessing you don't actually want the last column but the penultimate one or the two last ones. In that case use these to print the last 2 (8.39 Mbits/sec
):
awk '{print $(NF-1),$NF}' file
perl -lane 'print "$F[$#F-1] $F[$#F]"' file
sed 's/.* \(.* .*\)/\1/' file
rev file | cut -d' ' -f 1,2 | rev
and these to print the penultimate (8.39
):
awk '{print $(NF-1)}' file
perl -lane 'print $F[$#F-1]' file
sed 's/.* \(.*\) .*/\1/' file
rev file | cut -d' ' -f 2 | rev