Как преобразовать данные текстового файла в формат HTML таблицы в сценариях оболочки Linux

Я хочу преобразовать samplefile.txt в формат таблицы html. Следует игнорировать все специальные символы. Начало символа ### должен идти в заголовок таблицы, а содержимое внутри заголовка таблицы - в ячейку таблицы.

Также я хочу отформатировать заголовок таблицы и границы таблицы в этом скрипте.

Это простой 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 ответ

Решение

Кажется, есть несколько проблем со сценарием

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) Вы используете backticks(`) для запуска команды. Они устарели

заголовок =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 вместо трех

Другие вопросы по тегам