Ausführen von awk-Befehlen in PowerShell
awk
ist eine Skriptsprache zur Datenmanipulation und Berichterstellung. awk
ist eine Befehlszeilen-Programmiersprache, die Variablen, Textfunktionen, numerische Funktionen und logische Operatoren ohne Kompilierung unterstützt.
Leider ist awk
nicht vollständig in PowerShell integriert, da es das Windows-Betriebssystem verwendet. In diesem Artikel wird erläutert, wie wir mit PowerShell ähnliche Befehle und Funktionen wie die awk
-Befehle verwenden können.
Führen Sie awk
-Befehle in PowerShell aus
Mit dem Dienstprogramm awk
können Programmierer kurze, aber leistungsstarke Programme in Form von Anweisungen erstellen, die Textmuster angeben, was für Benutzer, die mit Linux-Befehlen oder Linux im Allgemeinen nicht vertraut sind, seltsam sein kann. Diese Textmuster werden in jeder Zeile durchsucht, und Maßnahmen werden ergriffen, wenn eine Übereinstimmung gefunden wird.
awk
wird hauptsächlich zum Scannen und Verarbeiten von Mustern verwendet. Es untersucht eine oder mehrere Dateien, um festzustellen, ob sie Zeilen enthalten, die den angegebenen Mustern entsprechen, und führt dann die zugehörigen Aktionen aus.
Das folgende Code-Snippet ist ein Beispiel für einen Befehl, der awk
verwendet.
awk '/"Box11"/ { print $0 }' test.txt|awk '{ SUM += $4} END { print SUM} '
Um ähnliche Operationen wie die awk
-Befehle auszuführen, würden wir den Get-Content
-Befehl verwenden, um den Inhalt einer Datei abzurufen und ein paar Zeichenfolgenoperationen in Windows PowerShell auszuführen. Wenn wir das obige Beispiel nehmen, würde es in PowerShell so aussehen.
Beispielcode:
Get-Content c:\temp\test.txt |
Where-Object{$_ -match '"Box11"'} |
ForEach-Object{($_ -split "\s+")[3]} |
Measure-Object -Sum |
Select-Object -ExpandProperty Sum
- Der Befehl
Get-Content
ruft den Inhalt der Textdatei ab. - Der Befehl
Where-Object
filtert die Zeilen mit der ZeichenfolgeBox11
. - Nach dem Herausfiltern durchläuft das Skript eine Schleife, um jede Zeichenfolge in ihr viertes Element aufzuteilen. Denken Sie daran, dass PowerShell bei Index
0
beginnt; Daher verwenden wir den Index3
anstelle von4
, anders als in unseremawk
-Befehl. - Das
Measure-Object
führt eine Berechnung auf der Eigenschaft durch, wobei es in diesem FallSum
ist. - Zuletzt gibt das
Select-Object
die expandierte EigenschaftSum
aus.
Wie wir bemerken, ist unsere PowerShell-Version des awk
-Befehls etwas länger. Gut, dass wir in PowerShell Verknüpfungen erstellen können, indem wir Aliase und einige PowerShell-Operatoren verwenden.
Beispielcode:
gc c:\temp\test.txt | ?{$_ -match '"Box11"'} | %{(-split $_)[3]} |
Measure -Sum | Select -Exp Sum
Wenn Sie alternativ WSL (Windows Subsystem for Linux) aktiviert haben, können wir awk
-Befehle unverändert ausführen. Eine Funktion des Windows-Betriebssystems namens Windows Subsystem for Linux (WSL) ermöglicht es Ihnen, ein Linux-Dateisystem komplett mit Linux-Befehlszeilentools und GUI-Anwendungen direkt unter Windows auszuführen.
Also müssen wir den Befehl wsl
aufrufen und awk
-Befehle nativ ausführen.
Beispielcode:
wsl -e awk '/"Box11"/{sum += $4} END{print sum}' test.txt
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn