我有一个文件,里面有很多这样的行,总是有相同数量的分号,并且在第一个分号之前总是有一个3个字符的字符串。
逆转录酶2; SS1234567;红色库存; 2021年6月13日;2021年6月14日; 154;出局;
放射治疗2号;红色库存; 2021年5月4日;二○二一年六月十四日;一四七二年;出局;
逆转录酶2; FF1234567;红色库存; 2021年5月4日;二○二一年六月十四日;一四七二年;出局;
RT2; LL1234567;红色库存; 2021年5月13日;二○二一年六月十四日;一四七二年;出局;
我想删除开始3字符串和分号从每一行。
这就是我如何拉入文件,它充满了空行和行我需要删除
#import the file removing the first row and removing blank rows
$inFile = Get-Content -Path ($InFileDir + $InFileName)|Select-Object -Skip 1|? {$_.trim() -ne "" }
# Removes the (12334 rows affected) line that's added by sql
$inFile = $inFile|Where-Object {$_ -notlike '(*)'}
# Source file is two different sql table exports appended to each other, store the different headers
$header1 = 'RT1;Polref;Tranaction;Eff Dte;Process Dte;Fund;Movement;'
$header2 = 'RT3;Polref;Tranaction;Eff Dte;Process Dte;Fund;Qty;Amt;'
#Get some file positions
$RowBeforeheader2Index = $InFile.IndexOf($header2) -1
$header1Index = $InFile.IndexOf($header1)
$header2Index = $InFile.IndexOf($header2)
$LastRow = $inFile.Length -1
$outFile[$header1Index..$RowBeforeheader2Index]
foreach ($row in $outFile)
{
//perform a substring on the row and add to $var
}
$var|Out-file 'C:\temp\output.txt'
我不知道如何填充foreach循环以获得我想要的结果。(在这个例子中,我只是将其命名为$var for ......我不是那么缺乏想象力)
编辑:
最后我将$var更改为列表,并在foreach循环中使用了以下代码
$var = New-Object System.Collections.Generic.List[System.Object]
foreach($row in $outFile)
{
$var.Add($row.Substring(4))
}
4条答案
按热度按时间gg0vcinb1#
假设可以删除固定数量的字符,并且每行至少有4个字符,那么只需对字符串数组(行)调用
.Substring()
即可:注意,即使
$outFile
是一个 * 数组 *,.Substring()
方法也是在 * 每个元素 * 上调用的,这是一个PowerShell特性,称为member-access enumeration。68de4m5k2#
试试这个-
注意-如果
ConvertTo-Csv
生成额外的列**#TYPE Selected.System.Management.Automation.PSCustomObject
**,则使用Select-Object -Skip 2
,否则可以使用Select-Object -Skip 1
。wgeznvg73#
有很多方法可以做到这一点。如果你的操作真的像删除第一列那么简单,你可以这样做。假设你的例子中
$outFile
的内容与你的清单相对应,并且$var = @()
已经在你的脚本中设置好了,你可以在foreach循环中放入以下内容:$var
的内容应该如下所示:wljmcqd84#
是删除多行文字每行中字符数的最简单方法。
多行模式由***m***标志启用,因此^和$将多次匹配字符串的开头和结尾。(除以\n)