csvをhtmlに変換するときにawkを使用して1列の背景色を変更する方法

csvをhtmlに変換するときにawkを使用して1列の背景色を変更する方法

CSVをhtmlに変換するために条件付きカラーエンコーディングを作成してmain.awk使用しました。color.awk

スクリプトは機能しますが、問題は条件が満たされると、行全体(すべての列)に色が付けられることです。

enir行(すべての列ではない)ではなく、条件を確認するために使用されるその列の背景色のみを変更したいと思います。

コマンドは次のように実行されます。

awk -f color.awk -f main.awk employee_data.csv >> employee_data.html

1)私のcolor.awkは以下のようになります。 $ 1は、カラー値をmain.awkに返す値に基づく最初の列です。

function check() {
        if (( $1 = 8613)) return "green"
        if (( $1 > 8613)) return "red"
        if (( $1 < 8613)) return "red"
}

2)私のmain.awkは次のようになります

main.awkはこの行を使用してcheck関数を呼び出してcolor.awkから色を取得します。 color = check();完全なスクリプトは次のとおりです。

BEGIN{

FS="|"
  print "<html><body>"
  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>"

  for ( i = 1; i < NF; i++ ) {

  color=check( );

print "<td bgcolor=\""color"\"><b><FONT  FACE=\"verdana\" SIZE=2>"$i"</b></FONT></td>"
#print "<td ><b><FONT  bgcolor=\""color"\" FACE=\"verdana\" SIZE=2>"$i"</b></FONT></td>"
}
  print "</tr>"

}
END {
  print "</table></body></html>"
}

ベストアンサー1

チェック関数には列1がハードコードされているため、代わりにforループで

color=check( );

あなたはしなければなりません

color = i == i ? check() : "someDefaultColor"

または、i検査関数(check(i))に渡された検査関数は、渡された値があるかどうかをテストします1

おすすめ記事