onefish
onechicken
twofish
twochicken
twocows
threechicken
Cosa succede se voglio grep per le righe contenenti "due", ma voglio solo la seconda corrispondenza. Quindi voglio il risultato "twochicken".Visualizza solo la n'a partita di grep
onefish
onechicken
twofish
twochicken
twocows
threechicken
Cosa succede se voglio grep per le righe contenenti "due", ma voglio solo la seconda corrispondenza. Quindi voglio il risultato "twochicken".Visualizza solo la n'a partita di grep
provare questo:
awk '/two/{i++}i==2' file
con i tuoi dati:
kent$ echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken
nota: se il file è enorme, fare questo:
awk '/two/{i++}i==2{print; exit}' file
grep -m2 "two" in-file.txt | tail -n1
Fermarsi dopo la seconda partita, quindi stampare la seconda riga.
che non fa esattamente ciò che ci si aspetta. se ci sono più corrispondenze di due, produrrà più righe ... – poncha
La coda dovrebbe essere: 'tail -n1'. – Thor
@poncha: davvero? Il grep -m2 si accerta che ci siano solo due partite. L'ho cambiato comunque, anche se penso che fosse OK prima. –
Se la parola (qui parola == due) si ripete più volte in una singola riga, & si desidera stampare t tale linea, utilizzare di seguito:
word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile
ad es. Per sotto di ingresso:
onefish
onechicken
twotwofish
twochicken
twocows
threechicken
verrà stampata twotwofish
, invece di twochicken
.
Questo potrebbe non essere quello che vuole user1787038, ma aggiunto per rispondere al mio commento.
'-m $ n' nella riga di grep è solo per qualche ottimizzazione, non necessaria per la funzionalità. – anishsane
Va osservato che se le threechicken
e twocows
linee sono stati scambiati, alias:
onefish
onechicken
twofish
twochicken
threechicken
twocows
quindi prima risposta di Kent (awk '/two/{i++}i==2' file
) produrrebbe l'output:
twochicken
threechicken
perché prende un'altra occorrenza dell'incontro per incrementare il contatore. La sua ultima risposta: awk '/two/{i++}i==2{print; exit}' file
evita questo problema.
la seconda opzione è superiore indipendentemente dalla dimensione del file, no? – poncha
@poncha, numero di riga – Kent
cosa intendi per 'numero di riga'? intendevo aggiungere "{print; exit} 'sarebbe una buona idea per qualsiasi dimensione di input ... oh. quella era l'opzione n. 3 in realtà;) Ho contato male))) – poncha