Za pomocą polecenia systemu Linux “ cat ”, jak wyświetlić tylko określone wiersze według numeru
On 15 lutego, 2021 by admin Jeśli użyję cat -n text.txt
do automatycznego numerowania wierszy, w jaki sposób mogę użyć polecenia, aby wyświetlić tylko niektóre numerowane wiersze.
Komentarze
Odpowiedź
Użyj sed
Wykorzystanie
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Aby wydrukować jedną linię (5)
$ sed -n 5p file Line 5
Aby wydrukować wiele wierszy (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Aby wydrukować określony zakres (5 – 8)
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Aby wydrukować zakres z inną określoną linią (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Odpowiedź
Jednym ze sposobów jest użycie sed
:
cat -n text.txt | sed "11d"
gdzie 11 to numer linii, którą chcesz usunąć.
Lub aby usuń wszystkie oprócz 11:
cat -n text.txt | sed "11!d"
Zakresy są również możliwe:
cat -n text.txt | sed "9,12!d"
A cat -n
nie jest nawet potrzebne:
sed "9,12!d" text.txt
Odpowiedź
Ty może używać awk prosto w górę.
awk "NR==1" file.txt
zastępując „1” żądanym numerem wiersza.
Komentarze
- To jest o milion mil najlepsza odpowiedź tutaj i zasługuje na dużo więcej miłości niż ma.
Odpowiedź
W zależności od celów, które lubię head lub grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
zwróci wiersze od 41 do 50.
lub
cat /var/log/syslog -n | grep " 50" -b10 -a10
pokaże linie od 40 do 60. Problem z metodą grep polega na tym, że trzeba używać konta do uzupełniania numerów linii (zwróć uwagę na spację)
Oba są bardzo przydatne do analizowania plików dziennika.
Komentarze
- Żaden z przykładów nie wymaga
cat
chociaż - cóż, tak … … ale… ale…… Są lepsze sposoby. Jednak pytanie dotyczyło używania kota, więc go użyłem.
-
cat
może ' t robić to, co OP chce
Odpowiedź
Jak pokazali Ci inni, nie ma potrzeby używania cat -n
. Inne programy zrobią to za Ciebie. Jeśli jednak naprawdę potrzebujesz przeanalizować wynik działania cat -n
i wyświetlić tylko określone wiersze (na przykład 4-8, 12 i 42), możesz zrobić:
$ 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
W awk
$1
jest pierwszym polem, więc to polecenie jest drukowane wszystkie wiersze, których pierwsze pola to i) od 4 do 8 (włącznie) lub ii) 12 lub iii) 42.
Jeśli chcesz również usunąć pole dodane przez cat -n
aby pobrać oryginalne wiersze z pliku, możesz wykonać:
$ 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
Komentarze
- Czy nie można ' t użyć
NR
zamiast$1
? - @SolomonUcko oczywiście, ale ponieważ pokazałem, jak to zrobić, używając konkretnie
cat -n
, pomyślałem, że użyję danych wyjściowych, które zapewniacat -n
.
Odpowiedź
Możesz użyć seda, aby wyświetlić tylko jedną liczbę i l koniec z pętlą for:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
może to również zrobić, podobnie jakawk