因此,我有一些看起来像这样的数据:
19/10/2020 05:57:08.200, 362173.64, 4498564.26, 10.000, 10.000, 0.000, 0, 3.2,
19/10/2020 05:57:08.270, 362173.64, 4498564.38, 10.000, 10.000, 0.000, 0, 3.2,
19/10/2020 05:57:08.340, 362173.64, 4498564.49, 10.000, 10.000, 0.000, 0, 3.2,
19/10/2020 05:57:08.410, 362173.64, 4498564.61, 10.000, 10.000, 0.000, 0, 3.7,
19/10/2020 05:57:08.470, 362173.64, 4498564.72, 10.000, 10.000, 0.000, 0, 2.8,
我需要按时间戳对数据进行排序。在linux下,我将通过awk运行这些数据以分出日期和时间,如下所示:
2020 05 10 19 57 08.200 362173.64 4498564.26 10.000 10.000 0.000 0 3.2
2020 05 10 19 57 08.270 362173.64 4498564.38 10.000 10.000 0.000 0 3.2
2020 05 10 19 57 08.340 362173.64 4498564.49 10.000 10.000 0.000 0 3.2
使用如下命令:
awk -F'[/:,]' '{print $3,$2,$1,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14}'
然后通过排序运行,再通过awk运行,以正确的顺序放回列。
awk -F'[/:,]' '{print $3,$2,$1,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14}' | sort |
awk -F' ' '{print $3"/"$2"/"$1,$4":"$5":"$6","$7","$8","$9","$10","$11","$12","$13","$14}'
在Powershell中是否有更好的方法可以做到这一点,或者至少可以做同样的事情?我有一个Powershell脚本,它非常笨拙地执行了类似的操作,但是在此过程中的某个地方,我丢失了换行符...
$nav = (gc $navfile | %{$_ -replace ", ",","} | %{$_ -replace " ",""} | %{"$($_.Split('[/,:]')[2,1,0,3,4,5,6,7,8,9,10,11,12,13,14])"} | sort-object | %{"$($_.Split(' ')[2,1,0,3,4,5,6,7,8,9,10,11,12,13,14])"} )
[regex]$sorted = " "
$one = $sorted.replace($nav, "/", 2)
$two = $sorted.replace($one, "!", 1)
$three = $sorted.replace($two, ":", 2)
$four = $three | %{$_ -replace " ",","}
$five = $four | %{$_ -replace "!"," "}
$six = $five | %{$_ -replace ",,","`n"}
echo $six
任何帮助将不胜感激。
在PowerShell中,你可以使用的Sort-Object
cmdlet的-你不需要修改源文件,在所有:
Get-Content $navfile |Sort-Object {
[datetime]::ParseExact($_.Substring(0, 23), 'dd/MM/yyyy HH:mm:ss.fff', $null)
}
该$_.Substring(0, 23)
表达式将提取前23个字符,即。19/10/2020 05:57:08.200
。然后,[datetime]::ParseExact()
调用将使用格式将结果字符串解析为时间戳dd/MM/yyyy HH:mm:ss.fff
,然后将结果[datetime]
值用作排序键。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句