BASH - 从白天提取日期

时间:2016-08-30 07:29:05

标签: linux bash shell

刚刚开始在这里与BASH合作,目前我正忙于提取本月每个星期三的日期....任何人都能帮我解释一下吗?干杯!

1 个答案:

答案 0 :(得分:1)

尝试以下脚本(受SoFan评论启发):

varY=2016;varM=8;varD=4; cal $varM $varY | sed 's/   / . /g' | awk -v f="$varD" 'NR>2{if ($f ~ "\.") {next;} {print $f}}'

<强>解释

  • varY=2016;varM=8;varD=4;:scrit的参数。分别为年,月和日。日期可以是1 2 3 4 5 6 7,默认情况下对应su mo tu we th fr sa
  • cal $varM $varY:显示$varM$varY输入参数的日历。在这种情况下:

        August 2016
    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
    

    由于awk没有读取空字段,我们必须转换空字段以便检测它们。

  • sed 's/ / . /g':在遇到的3个空格的每个块的中间添加.

     .  August 2016 .   
    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 .  .  .   
     .  .  .  .  .  .  .
    
  • awk -v f="$varD" 'NR>2{if ($f ~ "\.") {next;} {print $f}}'

    • awk -v f="$varD":表示您正在阅读$varD变量
    • 中存储的字段编号
    • NR>2:表示您正在跳过前两行
    • if ($f ~ "\.") {next;} {print $f}:如果该字段是一个点,我们会跳过它。否则,我们打印出来。

      3
      10
      17
      24
      31