使用PowerShell删除数据

时间:2016-11-22 16:10:00

标签: powershell

我有一个包含以下数据的文件: ABC|LT293012|293012 ABC|LT9281749|9281749 ABC|LT12345|12345

我想用它创建一个逗号分隔的字符串,如下所示:

LT293012,LT9281749,LT12345

换句话说,一切(包括)第一个|和第二个|之后的一切(包括)需要被剥夺。

我用过:

$list=(Get-Content $file).replace("ABC`|", "") -join "," 

但是这并没有剥离第二个|和数据

虽然'ABC'应该总是一个静态值,如果它更容易留下管道字符包围的任何东西,那就没问题了。这个价值总会有三个要素。

我想我可以使用ConvertFrom-CSV在文件中读取,添加标题,并将其输入到select中,只拉动中间元素,但可能有一种更简单的方法。

编辑:我忘记了一个关键部分。每个元素都需要包含在一个引号中,以便最终输出为'LT293012','LT9281749','LT12345'

4 个答案:

答案 0 :(得分:1)

这样做:

$data=get-content .\yourdatafile.txt|ConvertFrom-Csv -Delimiter "|" -Header "a","b","c"
$data.b  -join ","

给出:

LT293012,LT9281749,LT12345

答案 1 :(得分:1)

相当简单,只需使用-Replace运算符代替.Replace()方法。运营商使用RegEx,您可以这样做:

$list=((Get-Content $file)-replace "^.+?\|(.+?)\|.*$", '''$1''') -join ','

它应该非常快,因为你只是以文本而不是完整的对象来阅读它。

由于我的RegEx显然令人困惑,所以这里有link to RegEx101.com解释它。

答案 2 :(得分:1)

  

我想我可以使用ConvertFrom-CSV在文件中读取,添加标题,并将其输入到select中,只拉动中间元素,但可能有一种更简单的方法。

我认为使用*-Csv cmdlet 是一种简单的方法。

由于您需要从文件中对其进行reed,因此请使用Import-Csv

$list = (Import-Csv $file -Delimiter '|' -Header 1,2,3 |Select -Expand 2 |ForEach {"'$_'"})
($list -join ',') |Out-File result.txt

答案 3 :(得分:1)

就这样做

(ipcsv "c:\temp\exludevalue.txt" -d "|" -Header c1, c2).c2  -join ","