我有一个包含以下数据的文件:
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'
答案 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 ","