如何打印任意年的每个星期二的日期

sh/bash/dash/ksh/zsh等Shell脚本
novesky
帖子: 159
注册时间: 2008-07-12 17:18

如何打印任意年的每个星期二的日期

#1

帖子 novesky » 2011-11-29 16:26

如题,输入参数为年份
头像
ljj_jjl2008
论坛版主
帖子: 14256
注册时间: 2007-09-16 8:29

Re: 如何打印任意年的每个星期二的日期

#2

帖子 ljj_jjl2008 » 2011-11-29 16:33

如果是我在windows下开发,会建立一个数据库,里面建立数据表,存放所需要的数据:公元1年1月1日是星期几,哪些年份是润年,平年每个月多少天,润年每个月多少天等等。

然后遍界面,写sql语句,先通过sql语句生成指定年份的日历,再通过sql语句过滤出是星期二的,然后显示出来。

建库、初始化、写sql语句,做前台界面。

估计大约需要1-3小时工作量。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何打印任意年的每个星期二的日期

#3

帖子 eexpress » 2011-11-29 16:34

脚本去获取cal的输出就是。
awk取列。
● 鸣学
头像
ljj_jjl2008
论坛版主
帖子: 14256
注册时间: 2007-09-16 8:29

Re: 如何打印任意年的每个星期二的日期

#4

帖子 ljj_jjl2008 » 2011-11-29 16:37

如果写shell语句,思路估计差不多,我没有兴趣写了,
公元1年1月1日是星期几,哪些年份是润年,平年每个月多少天,润年每个月多少天写到变量和数组里面。
(sql语句)可以改成循环语句,把一年365天(或366天)是几月几号、星期几 循环计算一次,用判断语句碰到星期二的就用echo输出一次结果。
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid

Re: 如何打印任意年的每个星期二的日期

#5

帖子 leeaman » 2011-11-29 16:53

这个python就蛮简单的 :em06
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid

Re: 如何打印任意年的每个星期二的日期

#6

帖子 leeaman » 2011-11-29 17:05

jj叔叔的强项是sql看来是 :em06
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: 如何打印任意年的每个星期二的日期

#7

帖子 月下叹逍遥 » 2011-11-29 17:08

如果是C或者fortran,工作量不会太大。。。 :em06 :em06
浮生七十今三十,从此凄惶未可知
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: 如何打印任意年的每个星期二的日期

#8

帖子 月下叹逍遥 » 2011-11-29 17:08

leeaman 写了:jj叔叔的强项是sql看来是 :em06
jj叔貌似不会python :em04
浮生七十今三十,从此凄惶未可知
头像
ljj_jjl2008
论坛版主
帖子: 14256
注册时间: 2007-09-16 8:29

Re: 如何打印任意年的每个星期二的日期

#9

帖子 ljj_jjl2008 » 2011-11-29 17:22

月下叹逍遥 写了:
leeaman 写了:jj叔叔的强项是sql看来是 :em06
jj叔貌似不会python :em04
都说对了。 :em03
头像
liuenyan
帖子: 127
注册时间: 2008-09-11 21:53
来自: harbin
联系:

Re: 如何打印任意年的每个星期二的日期

#10

帖子 liuenyan » 2011-11-29 18:27

试着写了一个从cal命令里提取星期二的。尝试用awk ‘{print $3}’获取列会出错,因为cal输出的月份前几天可能是空白,用cut获取的数据是对的。

代码: 全选

#!/bin/sh

Months="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"

for year;
do
    echo $year
    i=1
    for m in $Months;
    do 
        echo $m `cal $i $year | sed '1,2d' | cut -c7-8 | xargs echo`
        ((i++))
    done
done

exit 0
上次由 liuenyan 在 2011-12-01 14:25,总共编辑 2 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何打印任意年的每个星期二的日期

#11

帖子 eexpress » 2011-11-29 21:40

ljj_jjl2008 写了:
月下叹逍遥 写了:
leeaman 写了:jj叔叔的强项是sql看来是 :em06
jj叔貌似不会python :em04
都说对了。 :em03
不对吧。他的强项不是lajj嘛。
● 鸣学
MaskRay
帖子: 61
注册时间: 2010-04-29 22:00
系统: Gentoo Linux ~amd64
联系:

Re: 如何打印任意年的每个星期二的日期

#12

帖子 MaskRay » 2011-11-30 18:16

[haskell]
import Data.Time.Calendar.WeekDate
import Data.Time.Calendar
import Data.List
main = mapM_ print $ nub $ map (flip (fromWeekDate 2011) 2) [1..53]
[/haskell]
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 如何打印任意年的每个星期二的日期

#13

帖子 fnan » 2011-12-01 6:12

ncal 2011|sed -nr 's/(^[^0-9]+$)|Tu(.*)/\1\2/p'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
LeePrison
帖子: 2
注册时间: 2011-12-13 21:36

Re: 如何打印任意年的每个星期二的日期

#14

帖子 LeePrison » 2011-12-22 15:53

fnan 写了:ncal 2011|sed -nr 's/(^[^0-9]+$)|Tu(.*)/\1\2/p'

ncal 2011|grep -P '^\s.*|Tu.*'
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 如何打印任意年的每个星期二的日期

#15

帖子 fnan » 2011-12-22 21:54

LeePrison 写了:
fnan 写了:ncal 2011|sed -nr 's/(^[^0-9]+$)|Tu(.*)/\1\2/p'

ncal 2011|grep -P '^\s.*|Tu.*'
#perl正则太容易不好玩,通常不用。
这种效果嘛:
ncal 2011|sed -r '/^\s|^Tu/!d'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复