bash:将人类可读时间转换为大文件中的纪元

时间:2015-07-10 00:37:05

标签: bash epoch

我有大量的csv文件(> 50 GB),其中包含以下列: -

"时间","数据列"

时间栏的数据类似于" 2015-07-10 00:17:45.000 GMT"。我希望转换时间列以反映等效的纪元时间而不是人类可读的形式。

在不创建其他文件的情况下,最快的方法是什么? (这个csv文件最初是python脚本的输出)。

1 个答案:

答案 0 :(得分:1)

date --date="2015-07-10 00:17:45.000 GMT" '+%s'

将打印

1436487465

您可以使用剪切来完成剩下的工作:

#!/bin/bash
while IFS='' read -r line || [[ -n $line ]]; do
  timefield=$(echo "$line" | cut -f1 -d, | tr -d '"')
  epochal=$(date --date="$timefield" '+%s')
  restofline=$(echo "$line" | cut -f2- -d,)
  echo "$epochal,$restofline"
done <$1

要使用上面的脚本,只需将其保存到文件中,然后将其命名为可执行文件,然后运行它,将文件名作为第一个参数读取。

所以使用inp.tst:

"2015-07-10 00:17:45.000 GMT","misc data","blah"
"2015-07-10 00:18:45.000 GMT","more data","misc"

您可以使用:

./fixtimes.sh inp.tst 

获取

1436487465,"misc data","blah"
1436487525,"more data","misc"