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"
我有巨大的 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"