首页 > 解决方案 > 从 csv 文件转换日期格式时出现“无效日期”错误消息?-壳

问题描述

我是 shell 脚本的新手,我正在尝试从具有格式日期的 csv 列中获取星期几:

16/10/2015
19/06/2010
16/09/2013
4/7/2008
29/12/2017

我使用date -%A并转换了结果,但不是全部,仍然收到错误消息:

date: invalid date ‘16/10/2015’ 
date: invalid date ‘19/06/2010’ 
date: invalid date ‘16/09/2013’ 
Monday 
date: invalid date ‘29/12/2017’ 
Monday

预期输出:

Friday
Saturday
Monday
Wednesday
Friday

我的代码:

cat file.csv | awk -F "," 'NR>1 {print $4}' | awk -F, '{"date +%A -d\""$1 "\""| getline dte;$1=dte}1' OFS=","

我还尝试在转换之前将值重新格式化为日期类型以确保但仍然收到错误消息,我有一个大数据文件,这就是为什么我试图在 awk 中循环整个列

标签: shellcsvdateawkdate-arithmetic

解决方案


您能否尝试在纯 bash 中进行以下操作(仅使用提供的示例进行测试和编写)。

while read line
do
  IFS='/' read -ra arr <<< "$line"
  newDate=${arr[2]}/${arr[1]}/${arr[0]}
  date -d  $newDate +%A
done < "Input_file"

对于提供的示例,以下将是输出。

Friday
Saturday
Monday
Friday
Friday

推荐阅读