¿No te encanta cuando dos comandos hacen cada uno lo que quieres pero tampoco los dos?
Esto es lo que calhace. Buen formato. Sin embargo, carece de números semanales:
$ cal
January 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Esto es lo que ncalhace. Formato extraño, pero con números de semana:
$ ncal -w
January 2012
Su 1 8 15 22 29
Mo 2 9 16 23 30
Tu 3 10 17 24 31
We 4 11 18 25
Th 5 12 19 26
Fr 6 13 20 27
Sa 7 14 21 28
1 2 3 4 5
El tipo de salida que quiero, en realidad un cruce entre caly ncal -w:
$ cal --magik-calendar-week-option
January 2012
Su Mo Tu We Th Fr Sa
1 1 2 3 4 5 6 7
2 8 9 10 11 12 13 14
3 15 16 17 18 19 20 21
4 22 23 24 25 26 27 28
5 29 30 31
bash
command-line
terminal
calendar
k0pernikus
fuente
fuente

gcal --starting-day=Monday --with-week-numberse ajusta más a mis necesidades pero esta herramienta es excelente.Esto resalta la fecha de hoy y puede mostrar cualquier mes a través
$1del formulario:YYYY-mm-dd... Por defecto es la fecha de hoyEstá configurado para mostrar los números de semana ISO, y el primer día de la semana es el lunes.
Aquí está la pantalla de este mes (con
20resaltado)fuente
08e09interpretado como octal en lugar de decimal ... Ahora debería estar bien ...Puede usar
nlpara numerar las líneas (ese es el propósito del programa :). Pero necesitas extraer la primera semana del mes de algún lado. Se puede hacer desdencalsí mismo:Insertamos esto como un parámetro para
nlla opción-v(número de línea inicial), y le decimos que solo numere líneas con números o espacios.Sin embargo, todo esto es terriblemente frágil. De todos modos, si no necesita
callas opciones más avanzadas, funcionará. Puede ponerlo en un archivo y reemplazarlo"$@"donde lo puse2 2012.EDITAR: ¡Pero esto está EQUIVOCADO!¡Acabo de notar que la primera semana de enero puede tener el número 52 o 53! Así que solo tenemos que hacer una excepción para enero, o simplemente extraer todos los números de la semana
ncaly aplicarlos a la salida decal.Esta es la solución que pensé originalmente, pero pensé (erróneamente) que lo simplificaría usando
nl. Utilizapaste, que combina archivos uno al lado del otro. Como no hay ningún archivo, tenemos que usar el bashism<(...); eso es lo que estaba tratando de evitar.Nuestro primer "archivo" será una lista de los números de la semana, con dos líneas vacías al principio:
El segundo, solo la salida de
cal. Todos juntos, como parámetros parapaste:Mucho más desordenado e incompatible que el otro. En fin ...
fuente
Genere la secuencia de semanas con
ncaly usepastepara tener ambas salidas juntas.Si no le gusta tener pestañas como delimitadores, simplemente agregue algo como
sed 's/\t/ /'Editar : mucho más simple, no hay que preocuparse por las pestañas:
fuente
calyncal(otros enfoques replican el comportamiento de cualquieracaloncal).Una forma de usar Perl (mi idioma de salida del
calcomando es español, pero espero que el resultado no varíe del inglés):Salida:
Explicación:
fuente
cal 02 2012? Parecía funcionar en mi prueba.Sin suficiente representante para comentar la respuesta de slm, gcal se puede instalar en Mac OS usando
brew install gcal.(Encontré la respuesta aquí primero, luego esta respuesta en ask different, pero la respuesta de Unix carecía de toda la información que necesitaba para instalar en la Mac).
fuente
Aquí está mi solución, que tiene un código más corto y funciona bien para otras fechas que no sean el mes actual. Lo sentimos para los estadounidenses, esto utiliza el formato ISO, es decir, el primer día de la semana es lunes. Esto se hace con la opción -m para cal y la opción% V para fecha
fuente
Hice este script para generar un calendario de servicio para los equipos. Genera calendario con números de semana y les asigna nombres (simplemente round-robin). Después de imprimir la salida, solo necesita copiarla en Excel y hacer "texto a columna" por; y una vez más realice "texto a columna" en la primera columna usando la opción "fijo". El beneficio de este calendario (en comparación con la orientación horizontal) es que puede usar el filtro automático (Alt + dff) y encontrar solo sus semanas.
#! / usr / bin / ksh y = 2017 set -A team1 Petars Justas Richard Jukka Jesper set -A team2 Modestas Timo Mats Andreas i1 = 0 i2 = 0 wn = 1 propio = 1 echo "WN Month Mo Tu We Th Fr Sa Su; Team1; Team2" ycal = `para m en 1 2 3 4 5 6 7 8 9 10 11 12 hacer IFS = cal -m $ m $ y | egrep -v "Mo | ^ $" | mientras lee la línea hacer echo $ línea | grep -q $ y && mname = $ línea || print $ mname $ line | sed 's /' $ y '//' hecho hecho` IFS = echo "$ ycal" | mientras lee line2 hacer IFS = echo "$ line2" | grep -v "1 2 3 4 5 6 7" | egrep -q "* 1 | * 1 $" || dejar wn ++ [$ own -ne $ wn] && {\ [$ i1 -eq $ {# team1 [@]} - 1] && i1 = 0 || dejar i1 ++; \ [$ i2 -eq $ {# team2 [@]} - 1] && i2 = 0 || dejar i2 ++; } printf '% 2s% s;% s;% s \ n' $ wn $ line2 $ {team1 [$ i1]} $ {team2 [$ i2]} propio = $ wn hechoLo sentimos, el código es un poco desagradable ... y no hay comentarios ... pero funciona bien;)
fuente
Realmente no quiero instalar
gcal, y no pude hacer que funcione correctamente en mi sistema. Entonces, sin gcal, la respuesta de funollet es de hecho la mejor solución. Simplemente lo cambié un poco para que también conserve el formato, como el resaltado del día , los colores , etc., utilizando el comando También eliminé caracteres redundantes, por lo que es adecuado como un alias, como tal:scriptO reemplazar
calcon una nueva función. Sin embargo, con esto no puedes hacer cosas comocal -3. Obtiene las semanas correctas pero no están alineadas correctamente. Una solución simple pero no completa es verificar sicalse llama sin argumentos, así:fuente