Tengo un Apachearchivo de registro, access.log¿cómo contar el número de ocurrencias de línea en ese archivo? por ejemplo el resultado de cut -f 7 -d ' ' | cut -d '?' -f 1 | tr '[:upper:]' '[:lower:]'es
a.php
b.php
a.php
c.php
d.php
b.php
a.php
El resultado que quiero es:
3 a.php
2 b.php
1 d.php # order doesn't matter
1 c.php
command-line
sort
Kokizzu
fuente
fuente

| sort | uniq -c| LC_ALL=C sort | LC_ALL=C uniq -cuniqpodría hacer eso ..Respuestas:
Como se indica en los comentarios.
La canalización de la salida
sortorganiza la salida en orden alfabético / numérico.Este es un requisito porque
uniqsolo coincide en líneas repetidas, es decirSi usa
uniqeste archivo de texto, devolverá lo siguiente:Esto se debe a que las dos
as están separadas porb- no son líneas consecutivas. Sin embargo, si primero ordena los datos en orden alfabético primero, comoLuego
uniqeliminará las líneas repetidas. La-copción deuniqcuenta el número de duplicados y proporciona resultados en la forma:Referencias
sort(1)uniq(1)fuente
printf '%s\n' ①.php ②.php | sort | uniq -cme da2 ①.phpphp\nphp①.phpordena de la misma manera que②.phpen mi configuración regional porque no se define ningún orden de clasificación para esos①y los②caracteres en mi configuración regional. Si quieres únicos valores para los valores de bytes (recuerda rutas de archivos no son necesariamente de texto), entonces usted necesita para corregir la configuración regional en C:| LC_ALL=C sort | LC_ALL=C uniq -c.La respuesta aceptada está casi completa. Es posible que desee agregar un extra
sort -nral final para ordenar los resultados con las líneas que aparecen con mayor frecuencia primeroopciones uniq :
opciones de clasificación :
En el caso particular, donde las líneas que está ordenando son números, debe usarlas en
sort -grlugar desort -nrver el comentario.fuente
-nopción.tr ' ' '\n' < $FILE | sort | uniq -c | sort -nr > wordcount.txt. El primer comando reemplaza los espacios con nuevas líneas, permitiendo que el resto del comando funcione como se esperaba.sort -grlugar resuelve esto.-g: compara según el valor numérico general (en lugar de-n: compara según el valor numérico de la cadena).-grpero creo que el resultadouniq -cserá como talsort -nry funcionará según lo previsto-grfunciona mejor. Pruebe estos dos ejemplos, que solo difieren en los indicadores gyn:echo "1 11 1 2" | tr ' ' '\n' | sort | uniq -c | sort -nryecho "1 11 1 2" | tr ' ' '\n' | sort | uniq -c | sort -gr. El primero se clasifica incorrectamente, pero no el segundo.Puede usar una matriz asociativa en awk y luego -opcionalmente- ordenar :
salida:
fuente