读取文件,计算分隔符,并使用不匹配的分隔符输出行号

问题描述 投票:1回答:1

我有一个名为test_file.txt的文件。第二行具有4个管道定界符,除第二行以外的所有其他行均具有3个管道定界符。我只想输出第2行,因为它比其他行多了一个定界符。

$colCnt = "C:\test.txt"
[int]$LastSplitCount = $Null
Get-Content $colCnt | ?{$_} | Select -Skip 1 | %{if($LastSplitCount -and !

($_.split("|").Count -eq $LastSplitCount))

{"Process stopped at line number $($_.psobject.Properties.value[5]) for column count mis-match.";break}

elseif(!$LastSplitCount){$LastSplitCount = $_.split("|").Count}}
powershell count delimiter line-numbers
1个回答
0
投票

如果您的文本文件看起来像这样:

blah|using|three|delimiters
blah|using|four |delimiter |characters
blah|using|three|delimiters
blah|using|four |delimiter |characters
blah|using two  |delimiters

以下代码应该输出多于(或少于)3个|分隔符的行:

$line = 0
switch -Regex -File "C:\test.txt" {
    '^(?:[^|]*\|){3}[^|]*$' { $line++ }   # this line is OK, just increase the line counter
    default { "Bad delimiter count in line {0}: '{1}'" -f ++$line, $_ }
}

输出:

Bad delimiter count in line 2: 'blah|using|four |delimiter |characters'
Bad delimiter count in line 4: 'blah|using|four |delimiter |characters'
Bad delimiter count in line 5: 'blah|using two  |delimiters'

正则表达式详细信息:

^在字符串开头声明位置(?:匹配下面的正则表达式[^ |]匹配非“ |”的任何字符*在零到无限次之间,尽可能多地重复,并根据需要进行回馈(贪婪)\ |匹配字符“ |”从字面上看){3}恰好3次[^ |]匹配非“ |”的任何字符*在零到无限次之间,尽可能多地重复,并根据需要进行回馈(贪婪)$在字符串结尾处声明位置(或在字符串结尾处的换行符之前,如果有的话)
© www.soinside.com 2019 - 2024. All rights reserved.