es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo aplicar los comandos cut y sed en Powershell?

Tengo un script de bash que recupera datos de 2 archivos separados (uno para los datos de usuario y otro para el texto predeterminado) y muestra una carta circular:

if [ $# -eq 0 ]
then
    echo "Por favor ingrese dos parámetros"
    exit
elif [ $# -eq 1 ]
then 
    echo "Por favor ingrese un parámetro adicional"
    exit
elif [ $# -gt 2 ]
then 
    echo "Por favor ingrese SOLO dos parámetros"
    exit
fi
while read line
do 
iN=`echo $line | cut -f1 -d";"`
iA=`echo $line | cut -f2 -d";"`
iD=`echo $line | cut -f3 -d";"`
cat $2|sed "s/<name>/$iN/g" | sed "s/<address>/iA/g" | sed "s/<date>/$iD/g"
done < data

Se necesita convertir a un script de PowerShell (PS), esto es lo que he podido hacer hasta ahora:

if ($# -eq 0) {
   Write-Output "Por favor ingrese dos parámetros"
} elseif ($# -eq 1 ) {
   Write-Output "Por favor ingrese un parámetro adicional"
} elseif ($# -gt 2) {
   Write-Output "Por favor ingrese SOLO dos parámetros"
}

foreach($line in Get-Content .\data.txt) {

}

No pude encontrar ningún equivalente de los comandos “sed” o “cut” en Internet, así que agradecería cualquier tipo de ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como lenguaje, PowerShell contiene un conjunto de comandos diferente en comparación con Bash, por lo que deberás usar métodos diferentes para lograr el mismo resultado.

    Por ejemplo, en lugar de sed, puedes usar el operador -replace para llevar a cabo tareas similares en PowerShell. De manera similar, puedes utilizar el cmdlet Select-Object para lograr efectos similares a cut.

    Aquí tienes un ejemplo de cómo convertir el script de Bash a un script de PowerShell:

    if ($args.Count -eq 0) {
        Write-Output "Por favor, introduce dos parámetros"
    } elseif ($args.Count -eq 1 ) {
        Write-Output "Por favor, introduce un parámetro más"
    } elseif ($args.Count -gt 2) {
        Write-Output "Por favor, introduce SOLO dos parámetros"
    }
    
    Get-Content .\data.txt | ForEach-Object {
        $iN,$iA,$iD = $_ -split ';'
        $content = Get-Content $args[1] |
            ForEach-Object {
                $_ -replace '<NAME>', $iN `
                   -replace '<ADDRESS>', $iA `
                   -replace '<DATE>', $iD
            }
        Write-Output $content
    }
    

    En este script de PowerShell, los parámetros se pasan a través de la variable $args, la cual contiene una matriz con todos los argumentos pasados al script. El cmdlet Get-Content se utiliza para leer el archivo de datos, y el cmdlet ForEach-Object se utiliza para recorrer cada línea del archivo de datos.

    El operador -split se utiliza para dividir cada línea en tres variables, $iN, $iA y $iD. Nuevamente, se utiliza el cmdlet Get-Content para leer el archivo de plantilla de la carta, y el cmdlet ForEach-Object se utiliza para reemplazar los marcadores de posición en la plantilla de la carta con los valores reales del archivo de datos utilizando el operador -replace.

    Finalmente, el contenido modificado se muestra en la consola utilizando el comando Write-Output.

    Esto debería darte una idea aproximada de cómo convertir tu script de Bash a un script de PowerShell. Ten en cuenta que es posible que se requieran algunas modificaciones dependiendo de los requisitos específicos de tu script.

Comments are closed.