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
답변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
.