powershell 合并文件、颠倒顺序和替换文本

aoyhnmkz  于 2023-06-06  发布在  Shell
关注(0)|答案(3)|浏览(132)

我每天都有一个数据文件(*.js),内容如下:
2019 - 03 - 23 00:55:00| 0;0;0;2720;0 0;0| 488;0;3270”
2019 - 03 - 23 00:50:00| 0;0;0;2720;0 0;0| 1360;0;3220”
2019 - 03 - 23 01:45:00| 0;0;0;2720;0 0;0| 192;0;3110”
...
我想每月将所有文件合并为一个文件。这与Windows PowerShell中的以下命令配合使用:

cat *.js > 2023_04.csv

但在合并之前,我想先做几个操作:
1.颠倒文件的顺序,使时间是升序而不是降序
1.删除每行开头的'm[mi++]="'
1.删除每行末尾的'"'
1.替换'|' with ';' on every line
在Powershell中可以这样做吗?如果没有,那么为它创建脚本的最佳选择是什么?
我可以在Windows PowerShell中使用'cat'命令将多个文件合并到一个文件中。

holgip5t

holgip5t1#

对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
mkh04yzy

mkh04yzy2#

您可以使用.Replace的组合,将|;的文字替换为开始m[mi++]="和结束"-replace的正则表达式替换,从那里管道到Sort-Object,以按;拆分字符串获得的第一个标记对字符串进行排序(默认情况下升序)。

(Get-Content *.js).Replace('|', ';') -replace '^m\[mi\++]="|"$' |
    Sort-Object { $_.Split(';', 2)[0] } |
    Set-Content path\to\export.file
osh3o9ms

osh3o9ms3#

好了

# remove old file
if (Test-Path -Path $filename) 
{
    try { Remove-Item $filename }
    catch { }
}

$result

# get all files in current directory with .js extension
$files = Get-ChildItem -Path .\ -Filter *.js

# loop through files
foreach ($file in $files)
{
    # read file
    $var = Get-Content $file
    
    # reverse file
    [array]::reverse($var)
    
    # remove m[mi++]=
    $var = $var -replace 'm\[mi\+\+\]\=', ''

    # remove double quotes (")
    $var = $var -replace '"', ''

    # replace | to ;
    $var = $var -replace '\|', ';'
    
    # add processed file to result
    $result += $var
}

$result | Out-File -encoding ASCII $filename```

相关问题