(g) awk: Substituindo expressão de outro script

1

Estou construindo um script genérico que será reutilizado de vários outros scripts. Para cada caso, preciso extrair o campo Nth no script genérico; Em alguns casos, as aspas duplas devem ser removidas desse script. O delimitador de campo também varia de caso para caso.

Idealmente, gostaria de simplesmente passar uma instrução awk inteira para o script genérico, desta forma:

script1.sh:

 generic_script.sh "{print $1}"

script2.sh:

 generic_script.sh "BEGIN {FS=","} {gsub(/"/, "", $1);  print $1}"

generic_script.sh

 awk_expression="$1"
 awk '$awk_expression' file_to_process.txt

(intencionalmente omiti o escape de " e $ em script2.sh por questões de legibilidade para essa questão).

Qual é a maneira "adequada" de fazer um script tão genérico e também fornecer argumentos corretos nesses dois scripts?

Ambos awk e gawk estão disponíveis para mim; Estou no MacOS HighSierra 10.13.6.

    
por wass rubleff 27.09.2018 / 21:14

1 resposta

2

Isso deve cobrir isso.

$ cat generic_script.sh
#!/bin/bash
awk_expression="$1"
awk "$awk_expression" file_to_process.txt
$ cat file_to_process.txt
"foo","bar"
$ ./generic_script.sh '{ print $1 }'
"foo","bar"
$ ./generic_script.sh 'BEGIN {FS=","} {gsub(/"/, "", $1);  print $1}'
foo
$
    
por 27.09.2018 / 21:18

Tags