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



我有这段代码

awk'{ 
  #some other code
  if(date -d data[i]){
    printf data[i]
    printf "validn"
  }else{
   printf "invalidn"
  }
}sdata.csv
  1. 数据.csv包含

    23/12/2018

    2018/12/23

  2. data[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 当日期格式正确时,或等于 1 如果日期格式不正确。

您的代码变为:

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

如果您需要更多支持,请告诉我!

您需要正确匹配日期格式:

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

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

最新更新