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

bash: Convert human readable time to epoch in large files

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

"time", "data column"

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

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

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

将打印

1436487465

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

#!/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 <

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

所以 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"