Mon google-fu échoue à nouveau. L'information est (probablement) là-bas, mais je ne peux pas le trouver. Je connais UNIX comme le fond de ma main, j'utilise cygwin etc. mais avec la disponibilité accrue de Powershell sur les serveurs, et (sur les serveurs de production au moins) la difficulté de mettre en place cygwin, j'essaie de prendre Powershell. Si rien d'autre, c'est une autre arme dans mon arsenal.Vous cherchez un équivalent powerhell de la commande awk spécifique
Essentiellement, je suis à la recherche de l'équivalent Powershell de la commande awk:
awk '$9 == "503" { print $0 }' < access_log
Pour ceux qui ne connaissent pas awk, ce compare essentiellement la zone 9 du fichier d'entrée, puis l'exécution de la block (c'est un journal d'accès apache, donc il me renvoie toutes les lignes d'access_log où le code d'état HTTP retourné est 503). Awk gère la division du fichier en champs basés sur les espaces automatiquement; $ 0 est la ligne entière (non annulée), avec des champs individuels allant dans $ 1, $ 2, ... [etc].
Je sais que je peux utiliser fendu comme ceci:
cat access_log | %{ $_.split() }
qui divise les lignes entrantes en un tableau, mais je ne peux pas travailler d'ici comment utiliser select-object
ou where-object
pour sélectionner (et sortie) lignes entières basées sur un champ donné.
L'alternative est select-string
mais je ne peux pas sembler voir aucun moyen de passer une expression le long des lignes de %{ $_.split()[8] -eq "503" }
. (Je note PowerShell est à base zéro, donc en regardant le champ 8). Je ne suis pas sûr si je manque quelque chose d'évident ici, et je n'ai pas trouvé le bon google-fu pour me donner l'info (donc ne serait pas surpris si c'est un dupe quelque part).
Vive toute aide :-)
Soit dit en passant, que awk de/b 'la awk « $ 9 = = "503" 'access.log'. – jthill