我有一个包含很多列的大 CSV 文件(几个 100 MB):
1;18Jun2013;23:58:58;;;l;o;t;s;;;;o;f;;;;;o;t;h;e;r;;;;;c;o;l;u;m;n;s;;;;;
您会看到第二列是我希望采用 %Y-%m-%d 格式的日期,以便在数据库中轻松插入和排序。我相信转换原始数据而不是稍后在数据库中转换更容易和更快。
主脚本使用 bash。现在我已经进行了如下的转换:
sed -n '2,$p' $TMPF | while read line; do
begin=$(echo "$line" | cut -d\; -f1)
origdate=$(echo "$line" | cut -d\; -f2)
#cache date translations, hash table for the poor
eval origdateh=h$origdate
if [ "x${!origdateh}" = "x" ]; then
# not cached till now, need to call date, then store
datex=$(date -d "$origdate" +%Y-%m-%d)
eval h$origdate="$datex"
else
# cache hit
datex=$(eval echo \$h$origdate)
fi
end=$(echo "$line" | cut -d\; -f3-)
echo "$begin;$datex;$end" >> $TMPF2
done
我使用 sed 从第二行开始(第一行包含 CSV 标头),我相信所有带有回声和削减的子外壳都会减慢速度,所以“哈希表”真的没有多大用处......
谁能让这一切快点?