我有这段代码
awk'{
#some other code
if(date -d data[i]){
printf data[i]
printf "validn"
}else{
printf "invalidn"
}
}sdata.csv
数据.csv包含
23/12/2018
2018/12/23
- 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。