csvをHTMLに変換し、個々のファイルをカラーコードするために、次のシェルスクリプトを書いていましたが、うまくいきます。カラーコーディング条件はレポート(csvファイル)によって異なるため、条件をハードコーディングするのではなく動的にしたいと思います。
これは私の現在の報告コードです:
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
awk
このコードでは、ステートメントに変数を使用したいが機能しません。cond
if
次のコードが実行されています。
if( $1=="180817CR0003988" ) {
color="BLUE"
}
しかし、これはそうではありません:
if( cond ) {
color="BLUE"
}
次のコマンドを使用してスクリプトを起動します。
/gk/laaz/csv2html.sh sample.csv sample.html "\$1==\"180817CR0003988\""
ベストアンサー1
awk変数は文字列として扱われます。あなたはできません。配列転送、条件は言うまでもありません。しかし、そうする必要はありません。条件を渡さず、実行に必要な値だけを渡してください。
if( $1 == cond ) {
color="BLUE"
}
その後、次のようにスクリプトを起動できます。
/gk/laaz/csv2html.sh sample.csv sample.html 180817CR0003988