Se utilizzo cat -n text.txt
per numerare automaticamente le righe, come posso utilizzare il comando per mostrare solo determinate righe numerate.
tail
+ head
può anche fare questo, come puòawk
Se utilizzo cat -n text.txt
per numerare automaticamente le righe, come posso utilizzare il comando per mostrare solo determinate righe numerate.
tail
+ head
può anche fare questo, come puòawk
Risposte:
Uso sed
uso
$ 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 e 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 l'intervallo con un'altra linea specifica (5 - 8 e 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
Un modo per farlo è usando sed
:
cat -n text.txt | sed '11d'
dove 11 è il numero della riga che si desidera rimuovere.
O per rimuovere tutti tranne 11:
cat -n text.txt | sed '11!d'
Gli intervalli sono anche possibili:
cat -n text.txt | sed '9,12!d'
E cat -n
non è nemmeno necessario:
sed '9,12!d' text.txt
A seconda degli obiettivi mi piace testa 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 da 40 a 60. Il problema con il metodo grep è che devi usare l'account per il riempimento dei numeri di riga (nota lo spazio)
Entrambi sono abbastanza utili per l'analisi dei file di registro.
cat
però
cat
non posso fare quello che vuole l'OP
Come altri ti hanno mostrato, non è necessario utilizzarlo cat -n
. Altri programmi lo faranno per te. Se, tuttavia, hai davvero bisogno di analizzare l'output di cat -n
e mostrare solo linee specifiche (ad esempio, 4-8, 12 e 42), puoi 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 stampa tutte le righe il cui primo campi sono i) tra 4 e 8 (compreso) o ii) 12 o iii) 42.
Se vuoi anche rimuovere 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