/ / Ako poznať počet zobrazených riadkov príkazu "mačka"? linux, bash, shell, sh

Ako poznať počet zobrazených riadkov príkazu "mačka"? linux, bash, shell, sh

Ako poznať počet zobrazených riadkov nasledujúceho príkazu "mačka"?

cat anyfile.txt | grep anypattern

Použitím | wc -l sa vyhnú zobrazeniu príkazového výstupu. A chcem udržať výstup zobrazený

odpovede:

1 pre odpoveď č. 1

Tu je jeden spôsob, ako to urobiť pri používaní grep:

grep "anypattern" anyfile.txt | awk "END{print NR}1"

EDIT: Uložiť počet riadkov v premennej shell:

Metóda 1:

count=$(grep "anypattern" anyfile.txt | awk "END{print NR > "/dev/stderr"}1" 3>&1 1>&2 2>&3)

Metóda 2:

grep "anypattern" anyfile.txt | awk "END{print NR > "/tmp/_temp"}1"
count=$(</tmp/_temp)

1 pre odpoveď č. 2

Jednosmerka:

awk "/anypattern/{x++;print};END{print x}" anyfile.txt

1 pre odpoveď č. 3

použitie tee presmerovať do wc:

printf "    line %dn" {1..4} | tee >(wc -l)
    line 1
line 2
line 3
line 4
4

1 pre odpoveď č. 4
grep anypattern anyfile | tee /dev/stderr | wc -l

Toto bude odvádzať výstup z grep na tee ktorý potom zapíše do štandardného výstupu stdout a štandardná chyba stderr, a nakoniec sa zobrazí štandardná chyba pri štandardnom výstupe wc ktorý zobrazí počet riadkov.


Príklad:

grep stack /usr/share/dict/cracklib-small | tee /dev/stderr | wc -l

haystack
smokestack
stack
stacked
stacking
stack"s
stacks
7

0 pre odpoveď č. 5
grep anypattern anyfile.txt 1>&2 | wc -l

Výraz 1>&2 poveruje bash duplikovať stdout (fd = 1) takým spôsobom, že všetko, čo je napísané z predchádzajúceho príkazu stdout ide stderr (fd = 2).

Prevádzkovateľ presmerovania | píše všetko, z ktorého pochádza stdout na stdin nasledujúceho príkazu vidíte výstup stderr na termináli.


0 pre odpoveď č. 6

TL; DR

Na mačka príkaz Zreťazí súbory, takže ak ste "re pokladoch mačka na súbor (ktorý je UUOC) čísla riadkov vyhral "t niečo užitočného vlastne znamená po prečítaní prvého súboru.Môžete vidieť v akcii z prvej ruky pomocou --number vlajka s GNU mačka.

použitie mačka podľa GNU Coreutils

Ak ste "re pomocou GNU mačka, potom stačí použiť --number flag. Napríklad:

$ cat --number <(echo one) <(echo two)
1  one
2  two

Zobrazí sa výstup, spolu s jeho aktuálne číslo riadku výstupného prúdu.Všimnite si, že je to úplne sekvenčné: v tomto príklade, aj keď "dva" je prvý riadok druhý súbor, je linka číslo dve reťazové výstupu.

Použitie Grep vlajky priamo

Ak ste "re pomocou GNU grep, môžete získať názvy a čísla kolekcie súborov riadkov pomerne ľahko.Napríklad:

$ grep --line-number --with-filename root /etc/passwd /etc/group
/etc/passwd:1:root:x:0:0:root,,,:/root:/bin/bash
/etc/group:1:root:x:0:

GNU grep bude spracovávať jednotlivé súbory, viaceré súbory a súbor kvapôčky, tak tam "s netreba vôbec mačka.