如何在linux shell脚本中将文本文件数据转换为html表格式

时间:2016-08-08 09:02:07

标签: shell awk awk-formatting

我想将samplefile.txt转换为html表格式。它应该忽略所有特殊字符.cchar ###的开头必须进入表头,而表头内的内容进入表格单元格。

另外,我想在此脚本中格式化表格标题和表格边框。

这是一个简单的samplefile.txt:

###File1
###File2
###File3
###Sports
Y|Cricket|Football|basketball
Y|beach volleyball|boxing|diving
Y|cycling|Batminton|Swimming
###Country
$|United States|United Kingdom|India    
$|Peru|Japan|Poland

这是我一直在使用的脚本 - 不知怎的,这段代码不能100%运行:

#!/bin/sh
tableflag=0
echo "<html>"
echo "<body>"
while read line
do
#echo $line
heading=`echo $line | cut -c-3`
headdata=`echo $line | cut -c4-`
if [ "$heading" == "###" ]; then
        #if [ $tableflag -eq 1 ]; then
                #echo "</table>"
        #fi
        echo "<th colspan="3" style="font-family: 'Times New Roman';"> $headdata </th>"
        echo '<tr>  </tr>'
        echo '<table border="1" style="width:80%;margin:30px">'
else
        tableflag=1
        echo '<tr>'
        echo "$line" | awk -F"|" '{print "<td>" $2 "</td><td>" $3"</td><td>"$4"</td>"}'
        echo '</tr>'
        echo '<tr> </tr>'

fi
done < samplefile.txt 
echo "</table>"
echo "</body>"
echo "</html>"

1 个答案:

答案 0 :(得分:0)

脚本似乎没什么问题

1) echo "<th colspan="3" style="font-family: 'Times New Roman';"> $headdata </th>"

此处您尚未转义"。正确的语法是

echo "<th colspan=\"3\" style=\"font-family: 'Times New Roman';\"> $headdata </th>"

2)您正在使用反引号(`)来运行命令。它们已被弃用

航向= echo $line | cut -c-3

而是使用$()

heading=$(echo $line | cut -c-3)

3)我假设你在|分割时打印了所有四列内容。但是在这里你只使用awk打印三列

awk -F"|" '{print "<td>" $1 "</td><td>" $2"</td><td>"$3"</td>"}'

我建议,如果您打算打印所有四列,请将colspan设置为4而不是三列