PowerShell用于计算文件中的列数 [英] Powershell to count columns in a file
本文介绍了PowerShell用于计算文件中的列数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在导入到SQL之前,我需要测试文件的完整性。 文件的每一行应具有完全相同的列数。
这些是以"|"分隔的文件。 我还需要忽略第一行,因为它是垃圾。如果每行的列数不相同,则我需要写入一条错误消息。
我尝试过使用类似以下内容的工具,但没有成功:
$colCnt = "c:datafeedsfiletoimport.txt"
$file = (Get-Content $colCnt -Delimiter "|")
$file = $file[1..($file.count - 1)]
Foreach($row in $file){
$row.Count
}
计算行数很容易。列不是。 有什么建议吗?
推荐答案
是,请跳过第一行阅读文件。对于每一行,将其在管道上拆分,并计算结果。如果它与上一次不同,则抛出错误并停止。
$colCnt = "c:datafeedsfiletoimport.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}}
这样就可以了,如果它发现错误的列计数,它将停止并输出类似以下内容:
Process stopped at line number 5 for column count mis-match.
编辑:添加了Where
捕获以跳过空行(?{$_}
)
Edit2:好的,如果您知道列数应该是多少,这就更容易了。
Get-Content $colCnt | ?{$_} | Select -Skip 1 | %{if(!($_.split("|").Count -eq 210)){"Process stopped at line number $($_.psobject.Properties.value[5]), incorrect column count of: $($_.split("|").Count).";break}}
如果希望它返回不包含210列的所有行,只需删除;break
并让其运行即可。
这篇关于PowerShell用于计算文件中的列数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文