Disección de un script

+1
0
-1

Aprovechando que Slap anunció ayer que no hay problemas para publicar aquí cierto código maldito y aun a sabiendas de que la polémica que ha rodeado ese código hace que sea casi como jugar con fuego :-P me decido a escribir un cutre-artículo en el que se mal-explique cada una de las partes del script que publicó Michael Stutz aquí (recomiendo a todos la lectura del artículo del señor Stutz ya que puede resultar bastante interesante para aquellos que nos gusta trastear con la línea de comandos).

El script en cuestión es

history|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c|sort -rn|head -10

Antes de empezar con la autopsia del script voy a explicar mínimamente el concepto de "tubería" en los shell-scripts, más que nada por si hay alguien que lo tiene más o menos claro, que deje de tenerlo al leer mi ¿explicación? ;)

Muchos de los comandos que se utilizan en una shell muestran por pantalla (realmente por la salida estándar) el resultado de una ejecución, así "less mifichero" vuelca a la pantalla el contenido de mifichero paginándolo.

Igualmente hay muchos comandos que pueden recibir (por la entrada estándar) la información que deben tratar, por ejemplo y siguiendo con el comando less esta información le puede llegar directamente del fichero que se le ponga (en el ejemplo anterior mifichero) pero también le podría llegar si fueramos capaces de enviarle un conjunto de datos a la entrada estándar, es decir si quisieramos sacar el contenido de un directorio (con ls -l) podriamos intentar que su resultado que en principio va a la salida estándar se redirigiera a la entrada del comando less (ahora veremos como) para que este comando muestre el resultado de ls -l pero paginándolo.

Para hacer esto se utilizan las tuberías, que no es más que algo (el caracter |) que se pone entre dos comandos de forma que la shell lo interpreta de tal forma que la salida del primer comando se la envía a la entrada del segundo comando.

Es decir en el último ejemplo hariamos

ls -l | less

Ahora ya sí pasamos con el script que nos saca los 10 comandos más utilizados en un terminal.

Con el primer comando (history) recuperamos el historial de comandos del usuario que tiene la forma

  ...
  n   comando
  n+1 otrocomando parametros | mascomandos masparametros
  n+2 comando|otrocomando
  ...

Con awk '{print $2}' nos quedamos con el segundo campo de la lista anterior (teniendo en cuenta que considera que cada campo está separado de los demás por espacios), es decir su ejecución a partir de lo que le envía el history será:

...
comando
otrocomando
comando|otrocomando
...

El segundo awk es para que de los comandos del tipo comando1|comando2 (así sin espacios entre ellos) se quede únicamente con comando1. La parte BEGIN {FS="|"} le indica que debe tomar como separador de campos el caracter "|", si no se le indicara nada cogería como separador el espacio. En el ejemplo quedará:

...
comando
otrocomando
comando
...

A continuación se le "enchufa" al sort para ordenarlo de forma que los comandos que son iguales queden juntos para luego "contarlos":

...
comando
comando
otrocomando
...

El resultado del sort se lo pasamos a uniq que con el parámetro -c nos elimina los duplicados pero contando cuantos hay de cada uno:

...
1 otrocomando
2 comando
...

A continuación volvemos a ordenarlo (ahora con sort -rn) de forma que quede ordenado por el número de veces que se repite sacandolos de mayor a menor:

...
2 comando
...
1 otrocomando
...

Y finalmente con head -10 nos quedamos con los primeros 10 del resultado anterior, es decir, en este caso con los 10 comandos más usados en la shell.


Extraido de aqui
  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.

Comentarios

Imagen de furtaxi

Sólo te ha faltado un pequeño detalle, pero que, curiosamente, recuerdo haber visto una pregunta sobre él (y no sé donde):

¿Como se escibe la barrita ? |

La respuesta, con ALT derecho, a la vez que la tecla superior del número 1, la que está cerca del Esc.

 

Saludos,

Roberto.

Mi página: www.vigonews.es con enlaces útiles para Ubuntu.

Consejo para inexpertos: Buscar antes de preguntar ¡ Mejoremos el foro !

Mi web : www.vigovideo.es
Buscar es más rápido que esperar una respuesta.

Imagen de joseluis

¿Como se escibe la barrita ? |

La respuesta, con ALT derecho, a la vez que la tecla superior del número 1, la que está cerca del Esc.

Si es que uno ya está muy mayor y me acabo complicando demasiado la vida para hacer cosas tan sencillas; llevo años buscando en google la tubería bash para llegar, por ejemplo a este artículo para ahí copiar la dichosa barrita (|) y pegarla en el script que me interesara, y todo porque no sabía que el punto de la ! se borraba con el ALT derecho en lugar de con el Shift ;)


  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de furtaxi

Para que lo copies y pegues sin tener que buscarlo:

< modo irónico on > 

:D 

En serio, son pequeñas cosa que te pueden volver loco, no es muy lógico teclear en google "tubería" para saber cómo se escribe el simbolito, se te llenaría la pantalla de Fontaneros, pero ningún forense homicida.

(Lo pongo así, por si tienes registrado el tuyo) :)

Saludos,

Roberto.

Mi página: www.vigonews.es con enlaces útiles para Ubuntu.

Consejo para inexpertos: Buscar antes de preguntar ¡ Mejoremos el foro !

Mi web : www.vigovideo.es
Buscar es más rápido que esperar una respuesta.

Imagen de Festor

 El caracter | se escribe con la combianción de teclas Alt Gr + 1

Es decir, pulsamos y mantenemos pulsado Alt Gr y luego pulsamos 1

****-------------------****

The Life of Nadock Blog

****-------------------****

Imagen de joseluis

Llegas un poquito tarde Festor ;)

Eso ya lo aclaró furtaxi, en este comentario, por si había alguien que no sabía como sacar la pipe, que por lo que dijo ya se había encontrado en algún sitio con esa pregunta :)


  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

Imagen de furtaxi

Yo me acuerdo que en Msdos (nótese la respetuosa mayúscula inicial) se usaba alt izquierdo y un número en el teclado numérico para los símbolos. He probado en la Consola (también, primera letra con shift, no va a ser menos), y nanai, salieron las cifras. ¿Hay algún truco? Es que me sé de memoria las de dibujar cajas , para poner alguna por los posts...

En ésta ventana de edición, el efecto fué cambios de pestañas, según su número y orden ...

Vale, mañana uso la caja de búsqueda, y me hago un máster en atajos de teclado, pero si me lo ahorráis..... tengo sueño...

Saludos,

Roberto.

Mi página: www.vigonews.es con enlaces útiles para Ubuntu.

Consejo para inexpertos: Buscar antes de preguntar ¡ Mejoremos el foro !

Mi web : www.vigovideo.es
Buscar es más rápido que esperar una respuesta.

Imagen de slap

Creo que los códigos de los caracteres gráficos que te sabías para MS-DOS no te valdrán en GNU/Linux.

En Gnome puedes introducir caracteres unicode con Ctrl+Shift+u+(código unicode). Por ejemplo: Ctrl+Shift+u+2502 te pintaría el carácter barra vertical

Y el juego de caracteres unicode lo puedes ver aquí: http://www.unicode.org/charts/PDF/U2500.pdf

Saludos.
slap

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de Festor

 Eso ya lo aclaró furtaxi, en este comentario, por si había alguien que no sabía como sacar la pipe, que por lo que dijo ya se había encontrado en algún sitio con esa pregunta

Ah!! Lo siento, no me fije :( 

****-------------------****

The Life of Nadock Blog

****-------------------****

Imagen de angelm6a

esa barra sale con undir solo una tecla donde esta ° y la |

El conocimiento es libre...