我有以下格式的CSV文件
20170102 00:00:00.803,
20170102 00:00:01.265,
20170102 00:00:05.818,
我设法用
添加斜杠 sed -r 's#(.{4})(.{2})(.{2})(.{2})(.{2})#\1/\2/\3 \4:\5:#' file.csv > newfile.csv
如下所示,以启用到时间戳的转换
2017/01/02 0:0::00:00.803
2017/01/02 0:0::00:01.265
2017/01/02 0:0::00:05.818
但是在使用
之后cat newfile.csv | while read line ; do echo $line\;$(date -d "$t" "+%s%N") ; done > nextfile.csv
我得到了:
2017/01/02 0:0::00:00.803,1499727600000000000
2017/01/02 0:0::00:01.265,1499727600000000000
2017/01/02 0:0::00:05.818,1499727600000000000
我的数据可能有些不对劲,但是我太过初学者才能获得缺失值。如果你能给我一些sed / awk魔法,我将非常感激。谢谢!
编辑:我需要有一个毫秒的时间戳,但我现在得到的只是零(多么典型)
答案 0 :(得分:1)
不确定这是否是您所追求的,但您可以解析没有日期的输出以形成日期戳。
awk '{ print substr($0,1,4)"/"substr($0,5,2)"/"substr($0,7,2)" "substr($0,10,2)":"substr($0,13,2)":"substr($0,16) }' dates.csv
我们使用awk提取有关日,月,年等的行提取(substr function),然后使用print以所需格式输出数据。
答案 1 :(得分:0)
原始格式被日期接受为时间戳。你不需要它。我相信你的输出需要Install-Package : An error occurred while retrieving package metadata for 'Newtonsoft.Json.10.0.3' from source 'C:\Path\packages'.
At line:1 char:1
+ Install-Package EntityFramework -IncludePrerelease
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Install-Package], Exception
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
。在bash中试试这个。
generateoutput.sh
"date,milliseconds since 1970-01-01 00:00:00 UTC"
其中timestamp.csv是原始格式的文件。
bc - 基本计算器,将纳秒转换为毫秒
逐行解析大文件必然需要时间。 如果您需要更好的性能,请拆分原始文件。我建议在新目录中执行此操作
#!/bin/bash
while read -r line
do
echo -n $line,
echo `date -d "$line" "+%s%N"` / 1000000 | bc
done < <(sed 's/,//g' $1)
为每个文件和split -l 100000 -d <filename>
输出
generateoutput.sh
tee -a
答案 2 :(得分:0)
gawk 解决方案:
awk -F',' '{ match($1,/^([0-9]{4})([0-9]{2})([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{3})/,a);
print mktime(sprintf("%d %d %d %d %d %d",a[1],a[2],a[3],a[4],a[5],a[6]))*1000 + a[7] }' file.csv
输出:
1483308000803
1483308001265
1483308005818