Shell 使用AWK验证if循环条件中的日期格式

Shell 使用AWK验证if循环条件中的日期格式,shell,csv,validation,date,awk,Shell,Csv,Validation,Date,Awk,我有这段代码 awk'{ #some other code if(date -d data[i]){ printf data[i] printf "valid\n" }else{ printf "invalid\n" } }sdata.csv sdata.csv包含 2018年12月23日 2018年12月23日 数据[i]包含sdata.csv文件中的日期值 我需要使用awk验证日期格式(MM/DD/YYYY),但此代码正在从sdata.csv打印两个

我有这段代码

awk'{ 
  #some other code
  if(date -d data[i]){
    printf data[i]
    printf "valid\n"
  }else{
   printf "invalid\n"
  }
}sdata.csv
  • sdata.csv包含

    2018年12月23日

    2018年12月23日

  • 数据[i]包含sdata.csv文件中的日期值

  • 我需要使用awk验证日期格式(MM/DD/YYYY),但此代码正在从sdata.csv打印两个日期值的有效。请提供帮助。

    您可以使用以下方法:

    arobert@arobert-VirtualBox [16:07:15]
    awk 'BEGIN{ret = system("date -d 23/12/2018 >/dev/null 2>&1"); print "return value=" ret}'                                                   
    return value=1
    arobert@arobert-VirtualBox [16:07:16]
    [/home/arobert/sedTest] >
    awk 'BEGIN{ret = system("date -d 12/23/2018 >/dev/null 2>&1"); print "return value=" ret}'                                                   
    return value=0
    
    调用
    date
    命令保存其返回代码,然后检查日期格式正确时rc是否等于0,不正确时rc是否等于1

    您的代码变成:

    awk'{ 
      #some other code
      strCmd = "date -d"data[i]">/dev/null 2>&1"
      ret = system(str)
      if(ret == 0){
        printf data[i]
        printf "valid\n"
      }else{
       printf "invalid\n"
      }
    }sdata.csv
    

    如果你需要更多的支持,请告诉我

    日期格式需要正确匹配:

    $ awk '/^(0[0-9]|1[012])\/([012][0-9]|3[01])/' sdata.csv
    12/23/2018
    

    当然,它不会识别11/12和12/11。

    它没有给我正确的结果。它将所有日期计算为有效日期。是因为awk版本吗?我有3.1.7。您是否可以尝试使用您在awk之外使用的date命令来测试导致问题的不是您的date命令?谢谢是的,它在外面工作,但不在awk支架内。谢谢。我想这是因为我们在strCmd中传递了一个变量。我用变量尝试了一下,结果是错误的。