Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date unix--获取工作日数_Date_Unix_Calendar - Fatal编程技术网

Date unix--获取工作日数

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程序并输出总的工作日(现在我们不担心正常工作日的

我正在使用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程序并输出总的工作日(现在我们不担心正常工作日的假日)

正如您在这里看到的,由于第三行输出本身只有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