Passe o argumento do script em um comando awk

Passe o argumento do script em um comando awk

Eu tenho um arquivo delimitado por barras verticais e preciso usar o grep na primeira coluna e, se um padrão corresponder, imprimirei a linha inteira. O comando abaixo está funcionando mas quando coloco em um script, acho que $1está conflitando com o comando:

Comando:

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

Roteiro:

./scripts.sh stringtomatch

Comando no script:

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

O $1que está entre aspas duplas é o argumento passado para o script. Algum conselho sobre como fazer isso funcionar?

Responder1

Observe que você pode simplificar bastante o seu arquivo awk. A ação padrão se uma expressão for avaliada trueé imprimir a linha atual. Então isso faz a mesma coisa:

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

De qualquer forma, você pode usar a -vopção de passar uma variável. Portanto, seu script pode 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"

informação relacionada