Jak pomocí příkazu Linux “ cat ” zobrazit pouze určité řádky podle čísla
On 15 února, 2021 by admin Pokud pomocí cat -n text.txt
automaticky čísluji řádky, jak potom pomocí příkazu zobrazím pouze určité číslované řádky?
Komentáře
Odpověď
Použít sed
Použití
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Tisk jednoho řádku (5)
$ sed -n 5p file Line 5
Tisk více řádků (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Tisk konkrétního rozsahu (5 – 8)
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Tisk rozsahu s jiným konkrétním řádkem (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Odpověď
Jedním ze způsobů je použití sed
:
cat -n text.txt | sed "11d"
kde 11 je číslo řádku, který chcete odstranit.
Nebo odstranit všechny kromě 11:
cat -n text.txt | sed "11!d"
Jsou také možné rozsahy:
cat -n text.txt | sed "9,12!d"
A cat -n
není ani potřeba:
sed "9,12!d" text.txt
odpověď
vy můžete použít awk přímo nahoru.
awk "NR==1" file.txt
nahradit „1“ požadovaným číslem řádku.
Komentáře
- Toto je o milion mil nejlepší odpověď zde a zaslouží si mnohem více lásky, než má.
Odpověď
V závislosti na cílech se mi líbí head nebo grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
vrátí řádky 41 až 50.
nebo
cat /var/log/syslog -n | grep " 50" -b10 -a10
zobrazí řádky 40 až 60. Problém s metodou grep spočívá v tom, že pro vyplnění čísel řádků musíte použít účet (všimněte si mezery)
Oba jsou velmi užitečné pro analýzu souborů protokolu.
Komentáře
- Ani jeden příklad nepotřebuje
cat
- no jo … … ale … ale … ….. Existují lepší způsoby. Otázka položená ohledně používání kočky, tak jsem ji použil.
-
cat
nemůže ' nedělat to, co OP chce
odpověď
Jak vám ukázali ostatní, není třeba používat cat -n
. Jiné programy to udělají za vás. Pokud však opravdu potřebujete analyzovat výstup cat -n
a zobrazit pouze konkrétní řádky (například 4-8, 12 a 42), můžete provést:
$ 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
V awk
je $1
první pole, takže se vytiskne tento příkaz všechny řádky, jejichž první pole jsou i) mezi 4 a 8 (včetně) nebo ii) 12 nebo iii) 42.
Pokud chcete také odstranit pole přidané cat -n
pro získání původních řádků ze souboru můžete provést:
$ 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
Komentáře
- Nelze ' t použít
NR
místo$1
? - @SolomonUcko jistě, ale protože jsem demonstroval, jak to udělat pomocí
cat -n
konkrétně, myslel jsem si, že použiji výstup, kterýcat -n
poskytuje .
Odpověď
Pomocí sed můžete zobrazit pouze jedno číslo a l oop this for a loop:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
to může také udělat, stejně jakoawk