繁体   English   中英

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

[英]Bash script to convert a date and time column to unix timestamp in .csv

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

谁能帮助我? 到目前为止,我已经发现了unix命令将任何给出的时间和日期转换为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

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

EDIT2 :更改了date命令,以便脚本实际工作。)

这应该做的工作:

 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

现在有两个方面:

第一:不需要cat foo.csv,只需通过<foo.csv流入while循环即可。

第二:不需要echo和tr来创建日期stringformat。 只需使用bash内部模式并替换并在原地进行

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM