unix - 获取工作日数

时间:2014-04-17 15:56:47

标签: date unix calendar

我正在使用AIX和ksh。我正在计算一个月的工作日数。我试图使用AWK,但我现在挂了。

这是我到目前为止所得到的:

cal | awk '{print $2, $3, $4, $5, $6} | awk 'NR > 2'

这是cal的正常输出(当前日期/时间):

        April 2014
Sun Mon Tue Wed Thu Fri Sat
         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

以下是我用该剧本获得的内容:

2 3 4 5
7 8 9 10 11
14 15 16 17 18
21 22 23 24 25
28 29 30

我的计划是,最后将这些行读入c程序并输出工作日总数(现在我们不担心正常工作日的假期)。

正如您在此处所看到的,由于第3行输出本身只有5列,因此它将在该周的第1个工作日丢弃。也许我认为这一切都是错误的 - 如果在Unix操作系统或C语言中有另一种方法可以做到这一点:我对“cal”和“awk”没有任何感情依恋(至今还没有)。

2 个答案:

答案 0 :(得分:7)

这可以做到:

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

答案 1 :(得分:0)

要计算直到今天的一个月的工作日:

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