2010-04-14 8 views

Respuesta

19

Puede utilizar AWK:

awk '/./{line=$0} END{print line}' my_file.txt 

Esta solución tiene la ventaja de utilizar una sola herramienta.

+4

Desventaja: Necesita leer el archivo WHOLE y asignar CADA LÍNEA a las variables awk -> Esto puede ser bastante intensivo en CPU e IO. –

+1

Sí, la solución es simple, pero está lejos de ser eficiente. Una solución eficiente abriría el archivo, buscaría hasta el final y escanearía hacia atrás. –

15

¿Qué le parece usar grep para filtrar primero las líneas en blanco?

$ cat rjh 
1 
2 
3 


$ grep "." rjh | tail -1 
3 
+5

o, en lugar de 'cat rjh | grep "." | cola -1 ', use' grep. rjh | cola -1 ' – amertune

+0

'grep". "' técnica es muy útil, gracias – Debugger

+0

podría alguien explicar el grep "." parte? –

28

Uso tac, para que no tenga que leer todo el archivo:

tac FILE |egrep -m 1 . 
+3

En OS X, es 'gtac' – vault

+0

@vault no en Sierra, 2016. – gsamaras

+0

@gsamaras intente deslizar de derecha a izquierda en la barra táctil – vault

2

si desea omitir cualquier espacios en blanco, es decir, espacios/pestañas en la parte final de la línea, no sólo las líneas vacías

awk 'NF{p=$0}END{print p}' file 
6

En lugar de tac puede utilizar tail -r si está disponible.

tail -r | grep -m 1 '.' 
+0

¿Qué versiones de 'tail (1)' tienen la opción '-r'? El que está en GNU coreutils no lo tiene, cf. http://debbugs.gnu.org/18808 –

1

Si tail -r no está disponible y que no tienen egrep, las siguientes obras muy bien:

tac $FILE | grep -m 1 '.'

Como se puede ver, es una combinación de dos de las respuestas anteriores.

Cuestiones relacionadas