Con il comando “ cat ” di Linux, come faccio a mostrare solo alcune righe per numero
Su Febbraio 15, 2021 da admin Se utilizzo cat -n text.txt
per numerare automaticamente le righe, come faccio a utilizzare il comando per mostrare solo alcune righe numerate.
Commenti
Risposta
Usa sed
Utilizzo
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Per stampare una riga (5)
$ sed -n 5p file Line 5
Per stampare più righe (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Per stampare un intervallo specifico (5 – 8)
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Per stampare un intervallo con unaltra riga specifica (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Risposta
Un modo per farlo è utilizzare sed
:
cat -n text.txt | sed "11d"
dove 11 è il numero della riga che vuoi rimuovere.
Oppure a rimuovi tutto tranne 11:
cat -n text.txt | sed "11!d"
Sono possibili anche intervalli:
cat -n text.txt | sed "9,12!d"
E cat -n
non è nemmeno necessario:
sed "9,12!d" text.txt
Risposta
Tu può usare awk verso lalto.
awk "NR==1" file.txt
sostituendo “1” con il numero di riga desiderato.
Commenti
- Questa è di un milione di miglia la migliore risposta qui e merita molto più amore di quanto non abbia.
Risposta
A seconda degli obiettivi che mi piacciono head o grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
restituirà le righe da 41 a 50.
o
cat /var/log/syslog -n | grep " 50" -b10 -a10
mostrerà le righe dalla 40 alla 60. Il problema con il metodo grep è che tu è necessario utilizzare laccount per il riempimento dei numeri di riga (notare lo spazio)
Entrambi sono abbastanza utili per analizzare i file di log.
Commenti
- Nessuno dei due esempi necessita di
cat
però - beh sì .. … ma …. ma … ….. Ci sono modi migliori. La domanda posta sullutilizzo di cat però, quindi lho usata.
-
cat
può ' t fare ciò che lOP desidera
Risposta
Come altri ti hanno mostrato, non è necessario utilizzare cat -n
. Altri programmi lo faranno per te. Se, tuttavia, hai davvero bisogno di analizzare loutput di cat -n
e mostrare solo righe specifiche (ad esempio, 4-8, 12 e 42), potresti fare:
$ cat -n file | awk "$1>=4 && $1<=8 || $1==12 || $1==42" 4 Line 4 5 Line 5 6 Line 6 7 Line 7 8 Line 8 12 Line 12 42 Line 42
In awk
, $1
è il primo campo, quindi questo comando viene stampato tutte le righe i cui primi campi sono i) tra 4 e 8 (inclusi) o ii) 12 o iii) 42.
Se si desidera rimuovere anche il campo aggiunto da cat -n
per ottenere le righe originali dal file, puoi fare:
$ cat -n file | awk "$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}" Line 4 Line 5 Line 6 Line 7 Line 8 Line 12 Line 42
Commenti
- Non è possibile ' utilizzare
NR
invece di$1
? - @SolomonUcko certo, ma poiché stavo dimostrando come farlo utilizzando
cat -n
in particolare, ho pensato di utilizzare loutput fornito dacat -n
.
Risposta
Puoi usare sed per mostrare solo un numero el oop con un ciclo for:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
può farlo, così comeawk