동적 색상 코딩을 사용하여 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

답변2

변수를 사용하지 마십시오.

awk는 여러 입력 프로그램 파일을 허용합니다.

각 사례에 대해 임시 awk 파일을 생성합니다. 예를 들면 다음과 같습니다.

file1.csv프로그램을 생성하는 데 사용됩니다 temporary.awk(file1.awk)

function check() { if ( $1 == ""180817CR0003988" ) return "blue" ; else "back" }

~을 위한fileX.csv

function check() { if ( $9 == ""unix.stackexchange.com" ) return "grey" ; else "blue" }

그런 다음 통화 중에

color=check() ;

awk라고 불린다

awk -f temporary.awk -f long.awk ...

귀하의 awk 문은 크기가 크므로 long.awk.

관련 정보