Мой гугл-фу снова меня подводит.Информация (вероятно) там, но я не могу ее найти.Я знаю UNIX как руку, использую Cygwin и т. Д. Однако, учитывая возросшую доступность Powershell на серверах и (по крайней мере, на производственных серверах) трудности с установкой Cygwin, я пытаюсь подобрать Powershell.Если не что иное, это еще одно оружие в моем арсенале.
По сути, я ищу Powershell, эквивалентный команде awk:
awk '$9 == "503" { print $0 }' < access_log
Для тех, кто не знает awk,это в основном сравнение поля 9 входного файла, а затем выполнение блока (это журнал доступа apache, поэтому он возвращает мне все строки из access_log, где возвращен код состояния HTTP 503).Awk автоматически обрабатывает разбиение файла на поля на основе пробелов;$ 0 - это целая строка (без изменений) с отдельными полями, входящими в $ 1, $ 2, ... [и т. Д.].
Я знаю, что могу использовать разбиение следующим образом:
cat access_log | %{ $_.split() }
, чторазбивает входящие строки в массив, но я не могу понять, как использовать select-object
или where-object
для выбора (и вывода) целых строк на основе заданного поля.
Альтернативаselect-string
но, похоже, я не вижу способа передать выражение по линии %{ $_.split()[8] -eq "503" }
.(Я отмечаю, что powershell основан на нуле, поэтому обращаю внимание на поле 8).
Я не уверен, что здесь упускаю что-то очевидное, и я не нашел подходящего google-fu, чтобы дать мнеинформация (поэтому не удивлюсь, если это где-то обман).
Приветствует любую помощь: -)