如何检查文件中的列数以满足条件
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()
是完全有效的。
我正在尝试编写一个 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()
是完全有效的。