Me gustaría obtener la última columna de esta muestra:
[ 3] 1.0- 2.0 sec 1.00 MBytes 8.39 Mbits/sec
[ 3] 2.0- 3.0 sec 768 KBytes 6.29 Mbits/sec
[ 3] 3.0- 4.0 sec 512 KBytes 4.19 Mbits/sec
[ 3] 4.0- 5.0 sec 256 KBytes 2.10 Mbits/sec
...
Si yo uso
cut -d\ -f 13
yo obtengo
Mbits/sec
6.29
4.19
2.10
porque a veces hay espacios adicionales en el medio.
text-processing
columns
cut
rubo77
fuente
fuente

Mbits/sec, ¿es eso lo que quieres o las 2 últimas columnas?Respuestas:
Para responder a su pregunta literalmente:
o
Pero eso no funcionará si el número entre paréntesis llega a 10, etc. Si solo le interesan los números, puede eliminar todo lo demás.
fuente
| sed 's/ .*//'al final de los dos primeros ejemplos. Por supuesto, hay muchas otras formas de hacerlo.+lugar de*: prueba de gato | sed 's / [^. 0-9] \ + /: / g' | cut -d: -f 6+y?en ERE pero deja\+y\?en BRE indefinido.Si usamos el
trcomando junto con la opción de compresión (-sbandera) para convertir todos los espacios consecutivos múltiples en un solo espacio y luego realizar lacutoperación con el espacio como delimitador, podemos acceder a la columna requerida con los números.Consulte el código recortado a continuación:
cat file | tr -s ' ' | cut -d ' ' -f 8fuente
Todos estos comandos imprimirán la última columna de un archivo separado por espacios:
awk '{print $NF}' fileen
awk,NFes el número de campos y$NFes el último campo.perl -lane 'print $F[$#F]' file-adivide el archivo en el espacio en blanco en la matriz@F,$#Fes el número de elementos en la matriz, por lo que$F[$#F]es el último elemento. Los-nmedios leen el archivo dado en la línea de comando y aplican el script pasado con-ea cada línea.-lsimplemente agrega un carácter de nueva línea (\n) a cadaprintdeclaración.sed 's/.* //g'una expresión regular simple que hace coincidir todo con el último espacio y lo elimina, dejando solo la última columna.
rev file | cut -d' ' -f 1 | revrevinvierte su salida para que el último campo sea el primero,cutcon espacio delimitador para imprimirlo yrevvolver el texto a la normalidad. Esto no funcionará si tiene espacios en blanco consecutivos .Según su aporte, supongo que en realidad no desea la última columna, sino la penúltima o las dos últimas. En ese caso, utilice estos para imprimir los últimos 2 (
8.39 Mbits/sec):y estos para imprimir el penúltimo (
8.39):fuente
No puede separar la aparición múltiple de espacios en blanco usando
cutsegún el manual:a menos que el texto esté separado por la misma cantidad o que utilice
trpara eliminar el exceso de ellos.De lo contrario, use herramientas alternativas como
awk,sedoex.Por ejemplo:
Reemplace
+q!con-cwqpara guardar los cambios en el lugar.fuente
Use un perl one-liner de esta manera:
perl -lane 'print $F[-2]' input_fileExplicación:
La opción
-ehace que el intérprete perl busque la secuencia de comandos en línea, en lugar de en un archivo.La opción
-nhace que la entrada (archivo o STDIN de una tubería) se lea línea por línea.Opción
-lelimina el separador de registro de entrada (dependiente del sistema operativo, nueva línea en UNIX por defecto) después de leer la línea, y lo agrega al final de cadaprintLa opción
-ahace que cada línea de entrada se divida en el espacio en blanco en una matriz@F, y$F[-2]es el segundo elemento que cuenta desde el final, que es el campo que desea. También puede usar$F[$#F-1], donde$#Fes el último índice de la matriz@F, que es ligeramente menos legible.fuente