Date unix--获取工作日数
我正在使用AIX和ksh。我在计算一个月的工作日数。我想用AWK,但现在挂断了 以下是到目前为止我得到的信息:Date unix--获取工作日数,date,unix,calendar,Date,Unix,Calendar,我正在使用AIX和ksh。我在计算一个月的工作日数。我想用AWK,但现在挂断了 以下是到目前为止我得到的信息: cal | awk '{print $2, $3, $4, $5, $6} | awk 'NR > 2' 以下是cal的正常输出(对于当前日期/时间): 下面是我从剧本中得到的: 2 3 4 5 7 8 9 10 11 14 15 16 17 18 21 22 23 24 25 28 29 30 我的计划是,最后,将这些行读入c程序并输出总的工作日(现在我们不担心正常工作日的
cal | awk '{print $2, $3, $4, $5, $6} | awk 'NR > 2'
以下是cal的正常输出(对于当前日期/时间):
下面是我从剧本中得到的:
2 3 4 5
7 8 9 10 11
14 15 16 17 18
21 22 23 24 25
28 29 30
我的计划是,最后,将这些行读入c程序并输出总的工作日(现在我们不担心正常工作日的假日)
正如您在这里看到的,由于第三行输出本身只有5列,因此它正在删除该周的第一个工作日。也许我把整件事都搞错了——如果在Unix操作系统上或通过C有其他方法可以做到这一点:我对“cal”和“awk”没有感情上的依恋(至少还没有)。这可以做到:
cal -h | cut -c 4-17 | tail -n +3 | wc -w
解释
cal
在4个字符的列上显示行-h
关闭今天的突出显示
April 2014
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
由于星期日是第一列,星期六是最后一列,因此需要提取字符4和17之间的数字:
$ cal -h | cut -c 4-17
April 2014
Mo Tu We Th Fr
1 2 3 4
7 8 9 10 11
14 15 16 17 18
21 22 23 24 25
28 29 30
然后拆下前两行:
$ cal -h | cut -c 4-17 | tail -n +3
1 2 3 4
7 8 9 10 11
14 15 16 17 18
21 22 23 24 25
28 29 30
然后数一数单词的数量:
$ cal -h | cut -c 4-17 | tail -n +3 | wc -w
22
要计算截至今天的每月工作日,请执行以下操作:
TODAY=\`date +%d\`
WDAYS=\`ncal -h | grep -vE "^S|^ |^$" | sed "s/[[:alpha:]]//g" | fmt -w 1 | sort -n | grep $TODAY -B 33 | wc -l\`
echo $WDAYS
非常感谢。因为我的系统(AIX)打印出一周中三个字符的天数,所以我使用了“cut-c5-24”,这使我得到了22天。不知道为什么你的系统没有出现18号?也许因为今天是耶稣受难节?任何,非常感谢--我想+1你,但我不在那里yetOh,18没有出现,因为今天(17)的突出显示扰乱了数据。也许是因为今天是圣日,是的!!我使用
cal-h
来删除突出显示。很高兴看到它对您很有用,现在我们知道我们这个月工作了22天:很幸运,我已经知道了14个工作日了哈哈——但是多亏了您,先生,AIX现在会处理这些输入,我不必担心!(如果你感兴趣的话,三月有20个。我也不会很快忘记。)太好了!事实上,我在man-cal
中挖了一点,发现你可以说cal-Feb-1975
。因此,我们可以检查每个月的工作天数<代码>加州1975年2月-h |切-C4-17 |尾-n+3 | wc-w等等:)于是我们开始统治世界。谢谢
TODAY=\`date +%d\`
WDAYS=\`ncal -h | grep -vE "^S|^ |^$" | sed "s/[[:alpha:]]//g" | fmt -w 1 | sort -n | grep $TODAY -B 33 | wc -l\`
echo $WDAYS