我每天有一个数据文件(*.js),内容如下:
m[mi++]="26.03.23 23:55:00|0;0;0;2720;0;0;0|488;0;3270"
m[mi++]="26.03.23 23:50:00|0;0;0;2720;0;0;0|1360;0;3220"
m[mi++]="26.03.23 23:45:00|0;0;0;2720;0;0;0|192;0;3110"
...
我想每月将所有文件合并为一个文件。 这适用于 Windows Powershell 中的以下命令:
cat *.js > 2023_04.csv
但是在合并之前,我想先做几个操作:
这在 Powershell 中可行吗?如果没有,为此创建脚本的最佳选择是什么?
我可以使用 Windows Powershell 中的“cat”命令将多个文件合并为一个文件。
您可以使用
.Replace
的组合将 |
与 ;
替换为正则表达式替换与 -replace
的开始 m[mi++]="
和结束 "
,从那里管道进入 Sort-Object
到按 ;
. 拆分字符串获得的第一个标记对字符串进行排序(默认升序)
(Get-Content *.js).Replace('|', ';') -replace '^m\[mi\++]="|"$' |
Sort-Object { $_.Split(';', 2)[0] } |
Set-Content path\to\export.file
对 Powershell 脚本进行了更详细的研究,到目前为止得出了这个结论。只需要颠倒文件的顺序即可。
学到了两件事来让它发挥作用:
set-executionpolicy remotesigned
$filename = "test.js"
# remove old file
if (Test-Path -Path $filename)
{
try { Remove-Item $filename }
catch { }
}
# import all .js files in directory
$var = Get-Content *.js
# remove m[mi++]=
$var = $var -replace 'm\[mi\+\+\]\=', ''
# remove double quotes (")
$var = $var -replace '"', ''
# replace | to ;
$var = $var -replace '\|', ';'
# export to file
$var | Out-File -encoding ASCII $filename