Cu comanda Linux “ cat ”, cum pot afișa numai anumite linii după numărul
On februarie 15, 2021 by admin Dacă folosesc cat -n text.txt
pentru a numerota automat liniile, cum folosesc apoi comanda pentru a afișa doar anumite linii numerotate.
Comentarii
Răspuns
Utilizați sed
Utilizare
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Pentru a imprima o linie (5)
$ sed -n 5p file Line 5
Pentru a imprima mai multe linii (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Pentru a imprima intervalul specific (5 – 8)
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Pentru a imprima intervalul cu alte linii specifice (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Răspuns
Un mod de a face acest lucru este prin utilizarea sed
:
cat -n text.txt | sed "11d"
unde 11 este numărul liniei pe care doriți să o eliminați.
Sau la eliminați toate, cu excepția 11:
cat -n text.txt | sed "11!d"
Sunt posibile și intervale:
cat -n text.txt | sed "9,12!d"
Și cat -n
nu este chiar necesar:
sed "9,12!d" text.txt
Răspunde
Tu poate folosi awk direct în sus.
awk "NR==1" file.txt
înlocuind „1” cu numărul de linie dorit.
Comentarii
- Acesta este cu un milion de mile cel mai bun răspuns aici și merită mult mai multă dragoste decât are.
Răspuns
În funcție de obiectivele care îmi plac capul sau grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
va returna liniile 41 până la 50.
sau
cat /var/log/syslog -n | grep " 50" -b10 -a10
va afișa liniile 40 până la 60. Problema cu metoda grep este că trebuie să utilizați contul pentru completarea numerelor de linie (observați spațiul)
Ambele sunt destul de utile pentru analiza fișierelor jurnal.
Comentarii
- Niciun exemplu nu are nevoie de
cat
deși - bine da .. … dar …. dar … ….. Există căi mai bune. Întrebarea adresată cu privire la utilizarea pisicii, așa că am folosit-o.
-
cat
nu poate ' să facă ceea ce OP vrea
Răspuns
După cum v-au arătat alții, nu este nevoie să utilizați cat -n
. Alte programe o vor face pentru dvs. Dacă totuși trebuie să analizați rezultatul cat -n
și să afișați numai linii specifice (de exemplu, 4-8, 12 și 42), puteți face:
$ 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
În awk
, $1
este primul câmp, deci această comandă imprimă toate liniile ale căror prime câmpuri sunt i) între 4 și 8 (inclusiv) sau ii) 12 sau iii) 42.
Dacă doriți, de asemenea, să eliminați câmpul adăugat de cat -n
pentru a obține liniile originale din fișier, puteți face:
$ 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
Comentarii
- Nu ai putut ' să folosești
NR
în loc de$1
? - @SolomonUcko sigur, dar din moment ce demonstram cum să fac acest lucru folosind în mod special
cat -n
, m-am gândit că voi folosi rezultatul pe carecat -n
îl oferă .
Răspuns
Puteți utiliza sed pentru a afișa doar un număr și l oop cu o buclă for:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
poate face acest lucru, la fel ca șiawk