#Generic Converter from CSV to HTML
#!/bin/bash
usage()
{
cat <<EOF
Usage:$(basename $0)[OPTIONS] input_file > ouptut.html
Explicit Delimiter can be specified if not then it default to comma as delimiter
Options:
-d specify delimiter , instead of comma
--head specified then treats first line as column header , <thead> and <th> tags
--foot last line , <tfoot> and <th> tags
Samples:
1.$(basename $0) input.csv
Parse 'input.csv' with comma as delimiter and send HTML table to STDOUT
2. $(basename $0) -d '|' < input.csv > out.html
Parse 'input.csv' with PIPE as delimiter and send HTML table to out.html
3. $(basename $0) -d '\t' --head --foot < input.tsv > out.html
Parse 'input.tsv' , tab as delimiter process first and
last lines as header and footer write to out.html
EOF
}
while true; do
case "$1" in
-d)
shift
d="$1"
;;
--foot)
foot="-v ftr=1"
;;
--help)
usage
exit 0
;;
--head)
head="-v hdr=1"
;;
-*)
echo "Error: Unknown Option '$1'""
echo "See '--help' for usage"
exit 1
;;
*)
f=$1
break
;;
esac
shift
done
if [ -z "$d" ];then
d=","
fi
if [ -z "$f" ];then
echo "Error : No Input file Specified"
echo "See '--help' for more information"
exit 1
fi
if [ -f "$f" ];then
echo "Error : File Specifed '$f' got corrupted and cannot be read"
echo "See '--help' for more information"
exit 1
else
fileContent=$(sed '/^$/d' $f)
last=$(wc -l <<< "$fileContent")
fi
awk -F "$d" -v last=$last $head $foot '
BEGIN {
print " <HTML><table border=1>"
}
{
gsub(/</,"\\<")
gsub(/>/,"\\>")
if(NR == 1 && hdr) {
printf " <thead>\n"
gsub(/&?,"\\>") }
if(NR == last && ftr) {
printf " <tfoot>\n"
}
print " <tr>"
for(f=1;f<=NF;f++){
if((NR == 1 && hdr)|| (NR == last && ftr)) {
printf " <th>font color=blue><center>%s</center></font></th>\n",$f
}
else printf " <td>justify>%s</justify></td>\n",$f
}
print " </tr>"
if (NR == 1 && hdr) {
printf " </thead>\n"
}
if (NR == last && ftr) {
printf " </tfoot>\n"
}
}
END {
print " </table></BODY></HTML>"
}
' <<< "$fileContent"
Comments
Post a Comment