Ejecución de comandos Awk en PowerShell
awk
es un lenguaje de secuencias de comandos para la manipulación de datos y la generación de informes. awk
es un lenguaje de programación de línea de comandos que admite variables, funciones de texto, funciones numéricas y operadores lógicos sin compilar.
Desafortunadamente, awk
no está completamente integrado en PowerShell ya que utiliza el sistema operativo Windows. Este artículo discutirá cómo podemos usar comandos y funciones similares a los comandos awk
usando PowerShell.
Ejecutar comandos awk
en PowerShell
La utilidad awk
permite a los programadores crear programas breves pero potentes en forma de declaraciones que especifican patrones de texto, que pueden resultar extraños para los usuarios que no están familiarizados con los comandos de Linux o Linux en general. Estos patrones de texto se buscan en cada línea y se toman medidas cuando se encuentra una coincidencia.
awk
se utiliza principalmente para escanear y procesar patrones. Explora uno o más archivos para ver si contienen líneas que coincidan con los patrones especificados y luego realiza las acciones asociadas.
El siguiente fragmento de código es un ejemplo de un comando que usa awk
.
awk '/"Box11"/ { print $0 }' test.txt|awk '{ SUM += $4} END { print SUM} '
Para realizar operaciones similares como los comandos awk
, usaríamos el comando Get-Content
para obtener el contenido de un archivo y realizar un par de operaciones de cadena en Windows PowerShell. Si tomamos el ejemplo anterior, así es como se vería en PowerShell.
Código de ejemplo:
Get-Content c:\temp\test.txt |
Where-Object{$_ -match '"Box11"'} |
ForEach-Object{($_ -split "\s+")[3]} |
Measure-Object -Sum |
Select-Object -ExpandProperty Sum
- El comando
Get-Content
obtendrá el contenido del archivo de texto. - El comando
Where-Object
filtrará las líneas con la cadenaBox11
. - Luego, una vez filtrado, el script se repetirá para dividir cada cadena de línea en su cuarto elemento. Recuerda que PowerShell comienza en el índice
0
; por lo tanto, usamos el índice3
en lugar de4
, a diferencia de nuestro comandoawk
. - El
Measure-Object
realizará un cálculo sobre el inmueble, siendo en este casoSum
. - Por último, el
Select-Object
generará la propiedad expandidaSum
.
Si nos damos cuenta, nuestra versión de PowerShell del comando awk
es un poco más larga. Menos mal que en PowerShell podemos crear accesos directos usando alias y un par de operadores de PowerShell.
Código de ejemplo:
gc c:\temp\test.txt | ?{$_ -match '"Box11"'} | %{(-split $_)[3]} |
Measure -Sum | Select -Exp Sum
Alternativamente, si tiene habilitado WSL (Subsistema de Windows para Linux), podemos ejecutar los comandos awk
tal como están. Una función del sistema operativo Windows llamada Subsistema de Windows para Linux (WSL) le permite ejecutar un sistema de archivos de Linux, completo con herramientas de línea de comandos de Linux y aplicaciones GUI, directamente en Windows.
Entonces debemos llamar al comando wsl
y ejecutar los comandos awk
de forma nativa.
Código de ejemplo:
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