【发布时间】:2021-04-22 23:15:40
【问题描述】:
所以,我有一些看起来像这样的数据:
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}'
然后通过 sort 运行它,然后通过 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" 是 Windows 的东西,对吧?如果您在 Windows 上,那么您正在使用 GNU awk,而 GNU awk 带有它自己的
sort功能,所以 - 为什么不直接在 1 次调用 awk 中完成所有工作呢?如果您 edit 您的问题显示预期输出,那么我们可以帮助您 - 我尝试运行您在发布的数据上提供的awk | sort | awk管道,但输出没有意义,所以我假设脚本或示例输入实际上是不正确的。您发布的示例输入不是已经按时间戳排序了吗?如果是这样,那对测试排序功能就没用了。 -
我正在制作一个便携式工具供其他人在 windows 下使用,这就是我在 powershell 中工作的原因。示例中的数据恰好已排序,但完整数据未排序。我可能在解释 awk 代码时遗漏了一些东西,但我在 linux 下有一个正常运行的脚本。
-
在提出问题时,重要的是要显示一个 minimal reproducible example 来说明问题(因此,如果您的问题是如何对数据进行排序,请为样本输入提供未排序的数据,并为预期的输入提供相同的数据输出)以及按照您提供的示例所说的实际代码。否则,这就像在您真正有一匹马时请您的机械师帮助您启动汽车一样。
标签: regex powershell sorting date awk