print awk unix

print - manual de awk unix



comando awk para aceptar dos variables como parĂ¡metros y devolver un valor (6)

Tengo un archivo que tiene 50 filas. Cada fila se compone de tres columnas. Las primeras dos columnas son las variables y esto se pasará como parámetros para devolver el valor de la tercera columna. por ejemplo ... archivo_comandos.txt es el archivo y contiene

A B 10 C D 20 E F 30 G H 50 I J 70 ...

Tengo un script con el siguiente comando.

#!/user/bin/sh READ_FILE=/export/home/user/command_file.txt VA1=A VA2=B GET_VALUE=`awk ''/ -v var="$VA1" ''$1 ~ var'' -v var1="$VA2" ''$1 ~ var1''''/ $READ_FILE l awk ''{print $3}''` echo $GET_VALUE

Cuando llamo a este script que pasa A y B como parámetros, espero que se devuelva un valor de 10. Pero devolvió los errores. Pero si codigo el valor en el siguiente comando, funcionará.

GET_VALUE=`awk ''/A B''/ $READ_FILE lawk ''{print $3}''`

¿Alguna sugerencia? Gracias.


Creo que esto es lo que estás buscando:

#!/user/bin/sh READ_FILE=/export/home/user/command_file.txt VA1=A VA2=B GET_VALUE=`awk -v var1=$VA1 -v var2=$VA2 ''$1==var1 && $2==var2 {print $3}'' command_file.txt ` echo $GET_VALUE


Fijo:

#!/user/bin/sh READ_FILE=/export/home/user/command_file.txt VA1=A VA2=B GET_VALUE=`awk "/$VA1 $VA2/ "''{print $3}'' < $READ_FILE` echo $GET_VALUE


Me disculpo por no poder determinar qué intenta hacer tu script, así que no puedo depurarlo correctamente. Creo que tal vez tienes citas anidadas o algo más está sucediendo.

Creo que el one-liner a continuación hará lo que quieras.

#!/bin/bash grep "^$1 $2" /export/home/user/command_file.txt | awk ''{print $3}''

Editar

De acuerdo, gracias a los demás por señalar lo que intentabas hacer con las opciones -v.

Su código tiene un $ en el comando echo GET_VALUE, y usted tiene una letra l en lugar de una tubería |. Además, hay otros errores tipográficos también.

Creo que esto funciona

READ_FILE=/export/home/user/command_file.txt awk -v var1=$1 -v var2=$2 ''$1 ~ var1 && $2 ~ var2; /^var1 var2/'' $READ_FILE | awk ''{print $3}''

pero prefiero el comando grep anterior ya que no requiere ningún esfuerzo adicional para pasar las variables de línea de comando a awk.


O quizás:

#!/bin/bash grep "$1" test.txt | grep "$2" | awk ''{print $3}''

Si tus vars necesitan estar en cualquier orden?


Tienes que usar awk''s paso variable awk''s antes de que el script awk comience para evitar las citas peludas, además de solucionar otros problemas:

#!/user/bin/sh READ_FILE=/export/home/user/command_file.txt VA1=A VA2=B GET_VALUE=$(awk -v var="$VA1" -v var1="$VA2" ''$1 ~ var && $2 ~ var1 {print $3}'' $READ_FILE) echo $GET_VALUE


Sé que esta es una publicación anterior, pero awk es aún más antigua y todavía está en uso, y la gente sigue buscando las mismas respuestas. Supongo que fui un ejemplo de esto.

Decidí implementar un escenario similar pero quería variables predefinidas en el archivo de configuración. El usuario pasa el nombre parcial del archivo de configuración al script como primer parámetro.

cfg=$PWD/$1.cfg foo=$(awk ''$1 ~ /foo/ { print $2 }'' $cfg)