Risposte:
Potresti provare
grep pattern file | tail -1
o
tac file | grep pattern | head -1
o
tac file | grep -m1 pattern
grep -n
) nel file reale, penso che dovessi tac
praticamente evitare, a meno che non volessi fare qualche sottrazione con wc -l
. In caso contrario, tac
con grep -m1
fa un sacco di senso.
grep
smetterà di funzionare dopo la prima partita. senza -m 1
, grep
prima troverà tutti i modelli corrispondenti nel file , quindi head
mostrerà solo il primo - molto meno efficiente. Dennis, ti preghiamo di considerare di postare questo in una risposta separata!
Per chi lavora con enormi file di testo in Unix / Linux / Mac / Cygwin. Se usi Windows dai un'occhiata agli strumenti Linux in Windows: https://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-windows .
Si può seguire questo flusso di lavoro per avere buone prestazioni:
zq
dal pacchetto.Citazione dal suo readme github:
Creare un indice
zindex deve essere informato su quale parte di ogni riga costituisce l'indice. Questo può essere fatto da un'espressione regolare, per campo o eseguendo il piping di ogni riga attraverso un programma esterno.
Per impostazione predefinita zindex crea un indice di file.gz.zindex quando viene richiesto di indicizzare file.gz.
Esempio:
creare un indice su righe corrispondenti a un'espressione regolare numerica. Il gruppo di acquisizione indica la parte da indicizzare e le opzioni mostrano che ogni riga ha un indice numerico univoco.
$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique
Esempio: creare un indice sul secondo campo di un file CSV:
$ zindex file.gz --delimiter , --field 2
Esempio:
creare un indice su un campo JSON orderId.id in uno qualsiasi degli elementi dell'array di azioni della radice del documento (richiede jq). La query jq crea un array di tutti orderId.ids, quindi li unisce con uno spazio per garantire che ogni singola riga inviata a jq crei una singola riga di output, con più corrispondenze separate da spazi (che è il separatore predefinito).
$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(\" \")'"
Interrogazione dell'indice
Il programma zq viene utilizzato per interrogare un indice. Viene fornito il nome del file compresso e un elenco di query. Per esempio:
$ zq file.gz 1023 4443 554
È anche possibile eseguire l'output per numero di riga, quindi per stampare le righe 1 e 1000 da un file:
$ zq file.gz --line 1 1000
Uso sempre cat (ma questo lo rende un po 'più lungo): cat file | grep pattern | tail -1
Darei la colpa al mio insegnante di corso di amministrazione linux al college che ama i gatti :))))
- Non devi cercare un file prima di estrarlo. grep pattern file | tail -1
ed è anche più efficiente.
cat
il file e reindirizzarlo grep
. Puoi grep
cercare il file direttamente tramite grep pattern file
(e quindi utilizzare tail
per restituire l'ultimo risultato), come nella risposta di Cakemox.
tac file | grep -m 1 pattern