Tengo un archivo que se escribe / actualiza constantemente. Quiero encontrar la última línea que contenga una palabra en particular, luego imprimir la última columna de esa línea.
El archivo se parece a esto. Se agregarán más líneas A1 / B1 / C1 a lo largo del tiempo.
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
Traté de usar
tail -f file | grep A1 | awk '{print $NF}'
para imprimir el valor 766, pero no se emite nada.
¿Hay alguna forma de hacer esto?
tail
le brinda. A menos que sepa que va a aparecer con cierta frecuencia, sería más seguroawk '/A1/ {print $NF}' file | tail -n1
.Para imprimir la última columna de una línea simplemente use $ (NF):
fuente
Una forma de usar
awk
:fuente
awk
la sintaxis críptica :)Puede hacer esto sin awk con solo algunas tuberías.
fuente
tal vez esto funciona?
fuente
Puedes hacerlo todo en
awk
:fuente
Usando Perl
fuente
perl -lane 'print $F[2] if /A1/' rayne.txt
awk -F " " '($1=="A1") {print $NF}' FILE | tail -n 1
Usar
awk
con el separador de campo -F establecido en un espacio "".Use el patrón
$1=="A1"
y la acción{print $NF}
, esto imprimirá el último campo en cada registro donde el primer campo es "A1". Canalice el resultado en la cola y use la-n 1
opción para mostrar solo la última línea.fuente
Ejecute esto en el archivo:
y obtendrás lo que estás buscando.
fuente
No es el problema real aquí, pero podría ayudar a alguien: estaba haciendo
awk "{print $NF}"
, tenga en cuenta las citas incorrectas. Debería serawk '{print $NF}'
, para que el caparazón no se expanda$NF
.fuente
ls -l | awk '{print $9}' | tail -n1
fuente