Pasar argumento de script en un comando awk

Pasar argumento de script en un comando awk

Tengo un archivo delimitado por barras verticales y necesito buscar la primera columna y, si un patrón coincide, imprimiré la línea completa. El siguiente comando funciona, pero cuando lo pongo en un script, creo que está $1en conflicto con el comando:

Dominio:

awk -F'|' < filename '{if ($1 == "stringtomatch") print $0}'

Guion:

./scripts.sh stringtomatch

Comando en script:

awk -F'|' < filename '{if ($1 == "$1") print $0}'

Lo $1encerrado entre comillas dobles es el argumento pasado al script. ¿Algún consejo sobre cómo hacer que esto funcione?

Respuesta1

Tenga en cuenta que puede simplificar enormemente su awk. La acción predeterminada si se evalúa una expresión truees imprimir la línea actual. Entonces esto hace lo mismo:

awk -F'|' < filename '$1 == "string"'

De todos modos, puedes usar la -vopción para pasar una variable. Entonces tu script puede ser:

#/bin/sh

if [ $# -lt 1 ]; then
  echo "At least one argument is required"
  exit
fi

## Allow the script to get the filename from the 2nd argument, 
## default to 'filename' if no second argument is given
file=${2:-filename}

awk -F'|' -v str="$1" '$1 == str' "$file"

información relacionada