2010-04-14 5 views

risposta

19

È possibile utilizzare Awk:

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

Questa soluzione ha il vantaggio di utilizzare un solo strumento.

+4

Lato negativo: è necessario leggere il file WHOLE e assegnare EACH LINE alle variabili awk -> Questo può essere piuttosto intenso per CPU e IO. –

+1

Sì, la soluzione è semplice, ma lungi dall'essere efficiente. Una soluzione efficiente aprirà il file, cercherà fino alla fine e scansionerà all'indietro. –

15

Cosa ne pensi di utilizzare grep per filtrare prima le righe vuote?

$ cat rjh 
1 
2 
3 


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

o, invece di 'cat rjh | grep "." | tail -1 ', usa' grep. rjh | tail -1 ' – amertune

+0

'grep". "' technic è molto utile, grazie – Debugger

+0

qualcuno potrebbe spiegare il grep "." parte ? –

28

Usa tac, in modo da non dover leggere l'intero file:

tac FILE |egrep -m 1 . 
+3

Su OS X, è 'gtac' – vault

+0

@vault non su Sierra, 2016. – gsamaras

+0

@gsamaras prova a scorrere da destra a sinistra sulla touchbar – vault

2

se si vuole omettere eventuali spazi bianchi, vale a dire, spazi/tabulazioni alla fine della linea, non solo righe vuote

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

Invece di tac è possibile utilizzare tail -r se disponibile.

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

Quali versioni di 'tail (1)' hanno l'opzione '-r'? Quello in coreutils GNU non ce l'ha, cf. http://debbugs.gnu.org/18808 –

1

Se tail -r non è disponibile e non si hanno egrep, il seguente funziona bene:

tac $FILE | grep -m 1 '.'

Come si può vedere, si tratta di una combinazione di due delle risposte precedenti.

Problemi correlati