Per file di grandi dimensioni, l'utilizzo di sort
sarà piuttosto lento. In questo caso, è meglio usare qualcosa come awk, che richiede un solo passaggio:
$ awk -F= 'BEGIN { max = -inf } { if ($3 > max) { max = $3; line = $0 } } END { print line }' test.txt
log2c=3.0 rate=89.5039
La complessità temporale di questa operazione è lineare, mentre la complessità spazio è costante (e piccolo). Spiegazione:
awk -F= '...' test.txt
: Richiamare awk su test.txt, utilizzando =
come separatore di campo
BEGIN { max = -inf }
: Inizializzare max
a qualcosa che sarà sempre più piccolo di quello che stai leggendo.
{ if ($3 > max) { max = $3; line = $0; } }
: Per ciascuna linea di ingresso, se max
è inferiore al valore del terzo campo ($3
), quindi aggiornarla e ricordare il valore della riga corrente ($0
)
END { print line }
: Infine, stampare la linea che ricordato durante la lettura dell'input.
fonte
2016-08-04 10:30:05
C'è un motivo per cui non lo fai in Awk? Questo dovrebbe essere banale dopo solo un breve tutorial introduttivo. – tripleee
La soluzione di devnull funziona perfettamente in bash. Tuttavia, il mio nome file di input proviene da un nomefile $ varable. Quindi, ho messo queste parole in eco "..." | sh. perdonami, sono un principiante. – Eman