Quero usar uma variável BASH dentro do AWK que é um comando AWK. Aqui está meu código de teste que pretendo tornar mais complicado se eu puder encontrar uma solução para esse problema.
exptransform=(
'print \"test\"'
)
awk -v awk_exptransform="${exptransform}" '
BEGIN{
printf ("Test.\n")
printf ("This is another test: %s\n",awk_exptransform)
awk_exptransform
}
'
Isso dá uma saída bem-sucedida para as duas primeiras linhas na declaração begin. A terceira linha não retorna nada. Como faço para que o AWK execute o conteúdo da variável como um comando?
Fiz muitas pesquisas na Internet e neste site com uma variedade de termos de pesquisa. Li a seção relevante de sed & awk (Dougherty, & Robbins, 1997). O que estou esquecendo? Isso é possível?
Aqui está o que estou tentando fazer:
cat test.txt
exptransform=(
'print $9 - $8'
'print 10^($9 - $8)'
)
for (( h=0 ; h<${#exptransform[@]} ; ++h )) ; do
awk -v awk_exptransform="${exptransform[h]}" 'BEGIN{FS = "\t"} {if ( $4~/1/ && $5~/2/ && $6~/1/ && $7~/1/ && $2!~/20160630_0609/ && $2!~/20170208_2324/ && $2!~/20160804_0635/) awk_exptransform}' test.txt
done
Saída desejada:
subject run day_1_date include night tone_delivered sleep_arousal tone_1 tone_n
00105 20170413_0406 20170411 1 2 1 1 70 105
00105 20170413_0535 20170411 1 2 1 1 70 70
35
0
99999999999999996863366107917975552
1
Produção real:
subject run day_1_date include night tone_delivered sleep_arousal tone_1 tone_n
00105 20170413_0406 20170411 1 2 1 1 70 105
00105 20170413_0535 20170411 1 2 1 1 70 70
Sinceramente,
Dante Picchioni