Я собираюсь предположить, что ваш текстовый файл находится в формате CSV, я не могу представить, с каким форматом вы работаете, если это таблица текстовых файлов и не отформатирована как CSV.
Обработать файл CSV и подсчитать количество свойств в результирующем объекте Powershell.
$columnCount = @( ( Import-Csv '\path\to\file.txt' ).PSObject.Properties ).Count
Нам нужно заставить объект Properties
к массиву (который является синтаксисом @()
), чтобы точно получить счет. Свойство PSObject
является скрытым свойством для метаданных об объекте в Powershell, в котором мы ищем Properties
(имена столбцов) и получаем количество их.
Если ваш CSV не имеет заголовков, Import-Csv
требует, чтобы вы вручную указывали заголовки. Есть трюки, которые вы можете сделать, чтобы создавать уникальные имена столбцов «на лету», но они слишком сложны, просто получая подсчет столбцов.
Чтобы взять то, что вы уже пробовали выше, мы можем получить данные в первой строке и обрабатывать количество столбцов, хотя вы делали это неправильно в вопросе. Вот как это сделать:
$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()
вполне допустимо.
Столкнулся с той же проблемой и смог разобраться, написав несколько строк с помощью aws-cdk, чтобы сгенерировать шаблон шаблона фильтра, чтобы увидеть разницу между этим и тем, что у меня было.
Похоже, что ему нужен каждый критерий, заключенный в круглые скобки.
- FilterPattern: '{ $.priority = "ERROR" && $.message != "*SomeMessagePattern*" }'
+ FilterPattern: '{ ($.priority = "ERROR") && ($.message != "*SomeMessagePattern*") }'
К сожалению, документы AWS для MetricFilter в CloudFormation не содержат примеров шаблонов JSON.