動的カラーコーディングを使用してCSVをhtmlに変換する

動的カラーコーディングを使用してCSVをhtmlに変換する

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このコードでは、ステートメントに変数を使用したいが機能しません。condif

次のコードが実行されています。

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

おすすめ記事