2011-11-25 168 views
6

我试图创建一个脚本来将.csv文件中的日期和时间两列转换为unix时间戳。所以我需要从每一行获取日期和时间列,将其转换并在包含时间戳的末尾插入到附加列中。Bash脚本将日期和时间列转换为.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, 

感谢这么多提前!

+0

你可以在你的csv文件中加几行例子吗? – ajreal

+0

当然,将其添加到问题中,欢呼 –

+0

转换只有不解析部分:http://stackoverflow.com/questions/10990949/convert-date-time-string-to-unix-timestamp-in-bash-command –

回答

1

本应该做的工作:

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 
7

你不提供从您的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 

编辑:删除一个uneccessary变量)

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

+0

谢谢为你提供帮助:我已经把这个脚本放到了shell脚本中:#!/ ltd/bin/bash cat myfile.csv |而读线; do t = $(echo $ line | tr','''); echo $ line \; $(date -d“$ t”“+%s”);做了我的错误非法选项 - D当我跑它?我是否也有权假设我需要替换';'与','因为我有一个逗号分隔的文件没有半结肠分布? –

+0

将它作为一个线索运行并在将其放入脚本文件之前对其进行测试,以查看它是否适用于您。是的,如果使用分号分隔的csv文件,则需要将'';''改为'',''。 – bos

+1

@bos你可以用'echo $ {line} \; $(date -d“$ {line //; /}”+'%s')缩短while循环的循环部分;''不需要echo和tr来获取正确的日期字符串。所以这可以在现场完成。 – f4m8

2

现在二人imporvements:

第一:无需猫foo.csv,只需通过< foo.csv将其流入while循环。

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

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