Powershell:逐行读取文本文件并按“|”分割

Den*_*nis 6 csv powershell text-parsing

我在使用“|”将一行拆分为数组时遇到问题 放在文本文件中并按一定顺序重新组装。文本文件中有多行与原始行类似。

这是原来的行:

80055555|Lastname|Firstname|AidYear|DCDOCS|D:\BDMS_UPLOAD\800123456_11-13-2018 14-35-53 PM_1.pdf
Run Code Online (Sandbox Code Playgroud)

我需要它看起来像这样:

80055555|DCDOCS|Lastname|Firstname|AidYear|D:\BDMS_UPLOAD\800123456_11-13-2018 14-35-53 PM_1.pdf
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

$File = 'c:\Names\Complete\complete.txt'
$Arr = $File -split '|'
foreach ($line in Get-Content $File)
{
  $outputline = $Arr[0] + "|" + $Arr[4] + "|" + $Arr[1] + "|" + $Arr[2] + "|" + 
    "@@" + $Arr[5] |
      Out-File -filepath "C:\Names\Complete\index.txt" -Encoding "ascii" -append 
}
Run Code Online (Sandbox Code Playgroud)

T-M*_*-Me 4

您需要单独处理文件的每一行,然后拆分它们。

$File = get-content "D:\test\1234.txt"
foreach ($line in $File){
    $Arr = $line.Split('|')
    [array]$OutputFile +=  $Arr[0] + "|" + $Arr[4] + "|" + $Arr[1] + "|" + $Arr[2] + "|" + "@@" + $Arr[5] 
}
$OutputFile | out-file -filepath "D:\test\4321.txt" -Encoding "ascii" -append 
Run Code Online (Sandbox Code Playgroud)

编辑:感谢 LotPings 这个替代建议基于-join并避免+=构建数组(这是低效的,因为它在每次迭代时重建数组):

$File = get-content "D:\test\1234.txt"
$OutputFile = foreach($line in $File){($line.split('|'))[0,4,1,2,3,5] -Join '|'}
$OutputFile | out-file -filepath "D:\test\4321.txt" -Encoding "ascii"
Run Code Online (Sandbox Code Playgroud)