Eu escrevi o script de shell abaixo para converter csv para HTML com código de cores para um único arquivo e está funcionando corretamente. A condição para a codificação por cores é diferente para diferentes relatórios (arquivos csv), então eu queria torná-la dinâmica em vez de codificar a condição.
Este é o meu código atual para um relatório:
cd /gk/laaz/
ipfile=$1
opfile=$2
condition=$3
awk -v cond="$condition" 'BEGIN{
FS="|"
print "<html><body></br></br>The report .</br></br></br>"
print "<table border=1 cellspacing=1 cellpadding=1>"
}
NR==1 {
# Header row
print "<tr>"
for ( i = 1; i <= NF; i++ ) {
print "<td><b>"$i"</b></td>"
}
print "</tr>"
}
NR>1 {
# Data rows
print "<tr>"
color="RED"
for ( i = 1; i < NF; i++ ) {
color="RED"
if( $1=="180817CR0003988" ) {
color="BLUE"
}
print "<td><b><FONT COLOR=\""color"\" FACE=\"verdana\" SIZE=2>"$i"</b></FONT></td>"
}
print "</tr>"
}
END {
print "</table></body></html>"
}
' $ipfile >> $opfile
fi
Nesse código, quero usar a awk
variável cond
na if
instrução, mas não está funcionando.
Este código está funcionando:
if( $1=="180817CR0003988" ) {
color="BLUE"
}
Mas isso não é:
if( cond ) {
color="BLUE"
}
Eu inicio o script com:
/gk/laaz/csv2html.sh sample.csv sample.html "\$1==\"180817CR0003988\""
shell-script
text-processing
awk
gaurav_hodade
fonte
fonte
cond
quandoif( cond )
é executado? Por favor, edite sua pergunta e mostre o comando que você usa para iniciar o script, incluindo esta variável.Respostas:
não use uma variável
O awk permite múltiplos arquivos de programa de entrada.
gere um arquivo awk temporário para todos os casos, como:
para
file1.csv
gerar umtemporary.awk
programa (file1.awk)para
fileX.csv
então em uso de chamada
awk sendo chamado como
declaração da sua awk sendo grande, eu sugiro colocá-lo em um arquivo chamado
long.awk
.fonte
Variáveis awk são tratadas como strings. Você não pode nem passar uma matriz , muito menos uma condição. Mas você não precisa. Em vez de passar a condição, basta passar o valor necessário para executar:
Em seguida, inicie o script com:
fonte
cond=$1=="foo"
não podem ser passadas como variáveis para trigerrìf ($ 1 == "foo") `no awk.