如何检查文件中的列数以满足条件

How to check column count in a file to satisfy a condition

我正在尝试编写一个 PowerShell 脚本来检查列数,看看它是否满足条件,否则会抛出错误或电子邮件。 我试过的东西:

$columns=(Get-Content "C:\Users\xs15169\Desktop\temp\OEC2_CFLOW.txt" | select  -First 1).Split(",")
$Count=columns.count
if ($count -eq 280)
  echo "column count is:$count"
else 
  email

我假设您的文本文件是 CSV 格式,如果它是 text-file table 而不是 CSV 格式,我无法想象您使用的是什么格式。

如果您的 CSV 有 headers

处理 CSV 文件,并计算生成的 Powershell 上的属性数 object。

$columnCount = @( ( Import-Csv '\path\to\file.txt' ).PSObject.Properties ).Count

我们需要强制Properties object 到一个数组(这是@() 语法)来准确地得到计数。 PSObject 属性 是关于 Powershell 中 object 元数据的隐藏 属性,这是我们查找 Properties(列名)并获取数一数有多少。

没有 headers

的 CSV

如果您的 CSV 没有 headers,Import-Csv 需要您手动指定 headers。您可以使用一些技巧来构建唯一的列名 on-the-fly,但对于简单地获取列数而言它们过于复杂。

采取你上面已经尝试过的方法,我们可以获取第一行中的数据并处理列数,尽管你在问题中做错了。以下是正确的做法:

$columnCount = ( ( Get-Content "\path\to\file.txt" | Select-Object -First 1 ) -Split ',' ).Count

原文有什么问题

以上两种解决方案都将列计数合并为一行代码。但是在您的原始示例中,您犯了几个小错误:

$columns=( Get-Content "\path\to\file.txt" | select  -First 1 ).Split(",")

# You forgot to prepend "columns" with a $. Should look like the below line
$Count=$columns.count

并且您忘记在 if 块中使用大括号:

if ($count -eq 280) {
  echo "column count is:$count"
} else { 
  email
}

至于使用 -Split 运算符与 .Split() 方法 - 这纯粹是我的风格偏好,使用 Split() 是完全有效的。