Criando e exportando / importando variável com awk?

1

Eu tenho um arquivo onde cada linha é uma nova informação de clientes, como

Pop corn, [email protected], 50, 200

No momento, estou tentando ver se é possível usar um awk/gawk script para atribuir cada coluna a uma variável e, em seguida, canalizar essas variáveis para sed para serem substituídas em um modelo? Eu estaria executando tanto awk / gawk e sed dentro de um script bash. O que é uma boa implementação que eu poderia seguir para fazer isso? Eu estou tentando não usar grep , porque eu estou tentando aprender como coesively usar awk / gawk, sed e bash scripts juntos ou perl desde que eu não tenha aprendido ainda.

    
por below_avg_st 02.10.2017 / 05:31

2 respostas

3

Parece-me que você deveria estar melhor fazendo algo como:

while IFS=, read -r name email x y _ignored_; do
  email=${email# } x=${x# } y=${y# }
  sendmail -oem -oi -t << EOF
To: $name <$email>
Subject: Whatever

x=$x y=$y
EOF
done < file.csv

Isso, já que você vai executar pelo menos um comando por linha, use o shell para ler as linhas em variáveis. E use a expansão de variável shell no documento here em vez de sed para fazer a expansão do modelo.

awk não ajudaria muito aqui, pois embora possa executar comandos com seu system() ou getline() (mas por meio da execução de um shell para analisar uma linha de comando), ele não pode definir variáveis de ambiente para aqueles, além de construir o código de shell que define essas variáveis. Então, isso se tornaria bastante complicado e menos eficiente. Algo como:

CODE='sendmail -oem -oi -t << EOF
to: $name <$email>
Subject: Whatever

x=$x y=$y
EOF' awk -F ', *' -v q="'" '
  function shquote(s) {
    gsub(q, q "\" q q, s)
    return q s q
  }
  {system("name="shquote($1)" email="shquote($2)" x="shquote($3) \
          " y="shquote($4)"\n"ENVIRON["CODE"])}' < file.csv
    
por 02.10.2017 / 11:02
0

Use a função split de awk para ler a linha na matriz com um delimitador específico.

awk '{split($0, array, /,/)}' customers_file

Em seguida, você pode passar para sed os elementos dessa matriz que deseja alimentar, basta imprimir esses elementos em awk .

    
por 02.10.2017 / 05:36