Cita:
Empezado por Casimiro Notevi
La verdad es que muy intuitivo no es.
|
Bueno, aquí estás usando el lenguaje AWK incrustado en el comando y ciertamente AWK es todo menos intuitivo. De todas formas, con práctica, el uso de comandos se torna intuitivo.
Veamos cómo obtener los diez comandos más usados:
1. El comando history nos da los últimos comandos ejecutados. La salida de history se ve similar a esto:
Código:
460 find .
461 find . -exec rm
462 find . -exec rm {}
463 find . -exec rm {} \;
464 find *.sql -exec rm {} \;
465 ls
466 cd ..
467 cp *sql foo/
468 ls
469 cp foo.bmp foo/
470 cd foo
471 ls
472 find *.sql -exec rm {} \;
Cada comando precedido por un número y hay varios espacios separando los números de los comandos.
2. Lo primero es tener delimitadores bien definidos. Para ello podemos comprimir los espacios separadores en uno sólo con el comando tr (
transalate) aplicado a la salida de history:
Código:
history|tr -s ' '
La opción s es de
squeeze. La salida se ve similar pero ya sólo hay un espacio separando los términos:
Código:
460 find .
461 find . -exec rm
462 find . -exec rm {}
463 find . -exec rm {} \;
464 find *.sql -exec rm {} \;
465 ls
466 cd ..
467 cp *sql foo/
468 ls
469 cp foo.bmp foo/
470 cd foo
471 ls
472 find *.sql -exec rm {} \;
473 ls
474 touch asql
475 ls
476 find *.sql -exec rm {} \;
477 rm .
478 ls
479 rm *
480 ls
481 cd ..
482 find *.sql -exec cp {} foo\ \;
483 find *.sql -exec cp {} foo \;
484 cd foo
3. El comando cut sirve para tomar partes de una cadena, pueden ser letras o columnas delimitadas. En este caso, nuestras columnas están delimitadas por un espacio y nos interesa la tercera (hay un espacio al principio):
Código:
history|tr -s ' '|cut -d ' ' -f3
-d indica el delimitador que por defecto es el tabulador y -f el número de columna deseada. La salida queda así:
Código:
find
find
find
find
find
ls
cd
cp
ls
cp
cd
ls
find
ls
touch
ls
find
rm
ls
rm
ls
cd
find
find
cd
Ya tenemos aislados los comandos.
4. O casi, porque podríamos tener concatenaciones anteriores:
Si sólo nos interesa el comando base tendremos que repetir el comando cut ahora con el pipe de separador:
Código:
history|tr -s ' '|cut -d ' ' -f3|cut -d '|' -f1
5. El comando uniq sirve para trabajar líneas repetidas y su opción -c las cuenta. Pero como sólo cuenta líneas repetidas adyacentes, primero hay que ordenarlas con el comando sort:
Código:
history|tr -s ' '|cut -d ' ' -f3|cut -d '|' -f1|sort|uniq -c
uniq antepone el número de ocurrencias:
Código:
4 cd
2 cp
9 find
7 ls
2 rm
1 touch
6. Ahora usamos sort nuevamente para ordenarlas por número de ocurrencias pues es la primera columna de la salida:
Código:
history|tr -s ' '|cut -d ' ' -f3|cut -d '|' -f1|sort|uniq -c|sort
7. Finalmente, tomamos las últimas (tail) 10:
Código:
history|tr -s ' '|cut -d ' ' -f3|cut -d '|' -f1|sort|uniq -c|sort|tail -10
8. Como detalle, podemos eliminar el mismo comando history del listado usando grep antes de contar:
history|tr -s ' '|cut -d ' ' -f3|cut -d '|' -f1|grep -v history|sort|uniq -c|sort|tail -10
Como se ve, cada comando se aplica naturalmente. Con práctica se vuelve intuitivo y muy potente para, por ejemplo, revisar bitácoras.
// Saludos