Bash脚本将date和时间列转换为.csv中的unix时间戳

我正在尝试创build一个脚本来将date和时间的.csv文件中的两列转换为unix时间戳。 所以我需要从每一行获取date和时间列,将其转换并在包含时间戳的末尾插入到附加列中。

任何人都可以帮我吗? 到目前为止,我已经发现了unix命令将任何给定的时间和date转换为unixstamp:

date -d "2011/11/25 10:00:00" "+%s" 1322215200 

我没有经验的bash脚本任何人都可以让我开始?

我的列和行的示例:

 Columns: Date, Time, Row 1: 25/10/2011, 10:54:36, Row 2: 25/10/2011, 11:15:17, Row 3: 26/10/2011, 01:04:39, 

非常感谢!

你不提供从你的csv文件exerpt,所以我使用这个:

 [foo.csv] 2011/11/25;12:00:00 2010/11/25;13:00:00 2009/11/25;19:00:00 

以下是解决问题的一种方法:

 $ cat foo.csv | while read line ; do echo $line\;$(date -d "${line//;/ }" "+%s") ; done 2011/11/25;12:00:00;1322218800 2010/11/25;13:00:00;1290686400 2009/11/25;19:00:00;1259172000 

编辑 :删除了一个不必要的变量。)

(编辑2:更改日期命令,使脚本实际工作。)

现在两个重要的东西:

第一:不需要猫foo.csv,只需通过<foo.csv到while循环。

第二:不需要echo&tr来创建日期字符串格式。 只需使用bash内部模式并替换就可以了

 while read line ; do echo ${line}\;$(date -d "${line//;/ }" +'%s'); done < foo.csv 

这应该做的工作:

  awk 'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\" +%s"|getline d; print $1,$2,d}' yourCSV.csv 

注意

你没有举例。 而你提到了csv ,所以我假定文件中的列分隔符应该是“逗号”。

测试

 kent$ echo "2011/11/25, 10:00:00"|awk 'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\" +%s"|getline d; print $1,$2,d}' 2011/11/25, 10:00:00, 1322211600