Skip to main content

CSV to HTML Converter Shell Script

#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(/</,"\\&lt;") gsub(/>/,"\\&gt;") if(NR == 1 && hdr) { printf " <thead>\n" gsub(/&?,"\\&gt;") } 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