Tengo el siguiente resultado:
2015/1/7 8
2015/1/8 49
2015/1/9 40
2015/1/10 337
2015/1/11 11
2015/1/12 3
2015/1/13 9
2015/1/14 102
2015/1/15 62
2015/1/16 10
2015/1/17 30
2015/1/18 30
2015/1/19 1
2015/1/20 3
2015/1/21 23
2015/1/22 12
2015/1/24 6
2015/1/25 3
2015/1/27 2
2015/1/28 16
2015/1/29 1
2015/2/1 12
2015/2/2 2
2015/2/3 1
2015/2/4 10
2015/2/5 13
2015/2/6 2
2015/2/9 2
2015/2/10 25
2015/2/11 1
2015/2/12 6
2015/2/13 12
2015/2/14 2
2015/2/16 8
2015/2/17 8
2015/2/20 1
2015/2/23 1
2015/2/27 1
2015/3/2 3
2015/3/3 2
Y me gustaría dibujar un histograma
2015/1/7 ===
2015/1/8 ===========
2015/1/9 ==========
2015/1/10 ====================================================================
2015/1/11 ===
2015/1/11 =
...
¿Sabes si hay un comando bash que me permita hacer eso?

Respuestas:
Prueba esto en perl :
EXPLICACIONES
-aes un explícitosplit()en la@Fmatriz, obtenemos los valores con$F[n]xes decirle a Perl que imprima un personaje N veces($F[1] / 5): aquí obtenemos el número y lo dividimos por 5 para obtener una salida de impresión bonitafuente
perl -lane 'print $F[0], "\t", $F[1], "\t", "=" x ($F[1] / 3 + 1)'Se ve realmente genial :) graciasEn
perl:ehace que se evalúe la expresión, por lo que me=repiten usando el valor de$1(el número que coincide(\d+))."="x($1\/3)lugar de"="x$1obtener líneas más cortas. (Se/escapa porque estamos en medio de un comando de sustitución).En
bash(inspirado en esta respuesta SO ):printfrellena la segunda cadena usando espacios para obtener un ancho de$n(%${n}s), y reemplazo los espacios con=.\t), pero puede hacerla más bonita canalizando acolumn -ts'\t'.$((n/3))lugar de${n}obtener líneas más cortas.Otra version:
El único inconveniente que puedo ver es que necesitará canalizar
sedla salida a algo si desea reducir, de lo contrario, esta es la opción más limpia. Si existe la posibilidad de que su archivo de entrada contenga uno de[?*ustedes, debe dirigir el comando w /set -f;.fuente
%*sa pesar de que fue el primerprintftruco relacionado que aprendí en la programación C.printf(sed) | trversión no funciona aquí hasta donde puedo decir.Fácil con
awkO con mi lenguaje de programación favorito
fuente
Qué tal si:
Que produce:
fuente
Esto me pareció un divertido problema de línea de comando tradicional. Aquí está mi
bashsolución de script:La pequeña secuencia de comandos anterior supone que los datos están en un archivo llamado imaginativamente "datos".
No estoy muy contento con la línea "ejecutarlo a través de sed y ordenar": sería innecesario si su mes y día del mes siempre tuvieran 2 dígitos, pero así es la vida.
Además, como nota histórica, los Unix tradicionales solían venir con una utilidad de trazado de línea de comando que podía hacer gráficos y diagramas ASCII bastante feos. No recuerdo el nombre, pero parece que GNU plotutils reemplaza la antigua utilidad tradicional.
fuente
if ($1 in count) ...?Buen ejercicio aquí. Volqué los datos en un archivo llamado "datos" porque soy muy imaginativo.
Bueno, lo pediste en bash ... aquí está en puro bash.
awk es una mejor opción.
fuente
Prueba esto:
La única parte difícil es la construcción de la barra. Lo hago aquí delegando
printfy metrgusta esta respuesta SO .Como beneficio adicional, es compatible con
shPOSIX.Referencias
fuente