Ejecución de comandos Awk en PowerShell

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 cadena Box11.
  • 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 índice 3 en lugar de 4, a diferencia de nuestro comando awk.
  • El Measure-Object realizará un cálculo sobre el inmueble, siendo en este caso Sum.
  • Por último, el Select-Object generará la propiedad expandida Sum.

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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artículo relacionado - PowerShell Command