PowerShell:ConvertTo-Csv,然后按对象过滤器设置内容

时间:2015-10-12 17:48:25

标签: powershell

我有以下变量:

$input = "H:\input_file.txt"
$output = "H:\output_file.txt"
$data = Get-Content -Path $input | ConvertFrom-Csv -Delimiter '|' -Header 'Col1','Col2','Col3','Col4','Col5'

如上所示,输入文件有5列。该文件中包含各种记录类型。并非所有记录类型都定义了5列。所以,让我们说我有3种记录类型 - A,B和C.A有3列,B有4列,C有5列。示例输入文件如下所示:

A|x|1
B|y|2|stuff
C|z|3|stuff|other
B|y|3|other
A|z|2

我的脚本然后对$ data中的某些列(Col1除外)中的值进行了一些修改。我想将$ data中的所有行输出到文本文件。

如果我做的话

$data | Select Col1,Col2,Col3,Col4,Col5 | ConvertTo-Csv -Delimiter '|' -NoTypeInformation | % {$_ -replace '"', ""} | Select-Object -Skip 1 | Set-Content -Path $output

它会将不必要的管道字符附加到记录类型A和B(因为它们的列少于5列,但我正在进行Select Col1,Col2,Col3,Col4,Col5)。

是否有一种干净的方法将$ data输出到文本文件而没有记录类型A和B上不必要的管道字符?我现在最好的猜测是为记录类型A,B和C设置3个独立的管道,这样我就可以对给定的记录类型进行正确的选择,然后以某种方式将它们粘合在一起。

2 个答案:

答案 0 :(得分:1)

以下代码可能对您有用:

<div class='test'>
  <div class="icon icon-test">Testing</div>
</div>

答案 1 :(得分:0)

我觉得做一些字符串操作似乎有点棘手和好,

$data|ConvertTo-Csv -NoTypeInformation|ForEach-Object{$_.replace('","','|').replace('"','').replace(',','')}|Select-Object -Skip 1|Set-Content $outputtext

这里通过避免_delimiter,我们可以在PowerShell中使用一些字符串处理方法

此致 Prasoon Karunan V