Как преобразовать данные текстового файла в формат 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 вместо трех