Mám Apache
logfile, access.log
, jak spočítat počet výskytů řádků v tomto souboru? například výsledek cut -f 7 -d ' ' | cut -d '?' -f 1 | tr '[:upper:]' '[:lower:]'
je
a.php
b.php
a.php
c.php
d.php
b.php
a.php
výsledek, který chci, je:
3 a.php
2 b.php
1 d.php # order doesn't matter
1 c.php
Přijatá odpověď:
| sort | uniq -c
Jak je uvedeno v komentářích.
Výstup výstupu do sort
uspořádá výstup do abecedního/numerického pořadí.
Toto je požadavek, protože uniq
shoduje se pouze na opakovaných řádcích, tj.
a
b
a
Pokud používáte uniq
v tomto textovém souboru vrátí následující:
a
b
a
Je to proto, že dva a
s jsou odděleny b
– nejsou po sobě jdoucí řádky. Pokud však nejprve seřadíte data v abecedním pořadí, nejprve jako
a
a
b
Poté uniq
odstraní opakující se řádky. -c
možnost uniq
spočítá počet duplikátů a poskytne výstup ve tvaru:
2 a
1 b
Reference:
sort(1)
uniq(1)