【发布时间】:2019-02-03 07:40:18
【问题描述】:
我需要像这样读取一个 CSV 文件 (list.csv):
0;John Doe;2001;03;24
1;Jane Doe;1985;12;05
2;Mr. White;2018;06;01
3;Jake White;2017;11;20
...
并根据第 3、4 和 5 列中的年/月/日添加一个带有 Unix 时间戳的列(不管我把它放在哪里),以获得此:
0;John Doe;2001;03;24;985392000
1;Jane Doe;1985;12;05;502588800
2;Mr. White;2018;06;01;1527811200
3;Jake White;2017;11;20;1511136000
...
所以我写了这个script.sh:
#!/bin/sh
while read line
do
printf "$line;"
date -d $(awk -F\; '{print $3$4$5}' <<<$line) +%s
done
然后我跑了:
<list.csv ./script.sh
它可以工作,但在拥有非常大的 CSV 时速度很慢。
有没有办法在 sed/awk 命令行中更快地做到这一点?
我的意思是,我可以(例如)将 bash 命令注入 sed/awk 行吗? 例如(我知道这行不通,这只是一个例子):
awk -F\; '{print $1 ";" $2 ";" $3 ";" $4 ";" $5 ";" $(date -d $3$4$5 +%s)}'
【问题讨论】:
-
这个
mktime的回答应该会让你朝着正确的方向前进:Convert date to epoch time using AWK in linux。 -
您的输入中似乎有错字:
2017:11;20。 -
谢谢!我修正了错字并尝试了您的提示。有用!它只有一个问题:它返回考虑到我的时区的年/月/日的时间戳。我想要一个UTC。但这是向前迈出的一步! :-)
-
不...等等!这正是我想要的!谢谢!!!
-
如果您想使用时区,请查看
awkmanual 中的utc-flag;)
标签: bash shell command-line