合并文件、倒序和替换文本

问题描述 投票:0回答:2

我每天有一个数据文件(*.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

但是在合并之前,我想先做几个操作:

  1. 反转文件的顺序所以时间是升序而不是降序
  2. 去掉每行开头的'm[mi++]="'
  3. 删除每行末尾的'"'
  4. 替换'|'和 ';'在每一行

这在 Powershell 中可行吗?如果没有,为此创建脚本的最佳选择是什么?

我可以使用 Windows Powershell 中的“cat”命令将多个文件合并为一个文件。

powershell replace merge reverse cat
2个回答
0
投票

您可以使用

.Replace
的组合将
|
;
替换为正则表达式替换与
-replace
的开始
m[mi++]="
和结束
"
,从那里管道进入
Sort-Object
到按
;
.

拆分字符串获得的第一个标记对字符串进行排序(默认升序)
(Get-Content *.js).Replace('|', ';') -replace '^m\[mi\++]="|"$' |
    Sort-Object { $_.Split(';', 2)[0] } |
    Set-Content path\to\export.file

0
投票

对 Powershell 脚本进行了更详细的研究,到目前为止得出了这个结论。只需要颠倒文件的顺序即可。

学到了两件事来让它发挥作用:

  • Powershell 脚本的扩展名为 .ps1 而不是 .bat
  • Windows 需要正确的权限才能运行 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
© www.soinside.com 2019 - 2024. All rights reserved.