Обработка входного потока с помощью awk, а затем с помощью sed - PullRequest
1 голос
/ 04 мая 2011

Я хочу создать HTML-таблицу из текстового файла с разделителями табуляции. Сначала я пытаюсь посчитать столбцы, используя

cols=$( head -1 $1 | awk 'NR == 1 { print NF }' )

затем редактировать поток

sed '1i\
<HTML>\
<BODY>\
<TABLE COLS='"$cols"'>
1 s/    /<\/TH><TH>/g
1 s/.*/<TR><TH>&<\/TH><\/TR>/
1! s/   /<\/TD><TD>/g
1! s/.*/<TR><TD>&<\/TD><\/TR>/
'

Моя проблема в том, что при обработке команды sed отсутствует первая строка входного файла.

Есть ли какие-либо советы по кормлению седов и первой строкой? Портативное решение для любой оболочки приветствуется.

Обновление: скрипт называется: $ ./script

Первая строка данных содержит заголовки столбцов, и эта строка отсутствует.

1 Ответ

3 голосов
/ 04 мая 2011

Просто с помощью awk.Его вывод проверяет без предупреждений.Валидатор говорит, что «cols» не является допустимым атрибутом, поэтому я его пропустил.

Возможно, вы захотите использовать функцию для построения строк таблицы, передав ей тег для типа строки, которую вы используете.здание - или "th" или "td".

# html-table.awk -- create a web page with an html table from a tab-delimited file.
BEGIN {
  FS = "\t";
  print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"";
  print "  \"http://www.w3.org/TR/html4/loose.dtd\">";
  print "<html>";
  print "<head>";
  print "<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\">";
  print "<title></title></head>";
  print "<body>";

}
NR == 1 {
  print "<table>";
  print "<tr>";
  for (i = 1; i <= NF; i++) {
    printf("<th>%s</th>\n", $i);
  }
  print "</tr>";
}
NR > 1 {
  print "<tr>";
  for (i = 1; i <= NF; i++) {
    printf("<td>%s</td>\n", $i);
  }
  print "</tr>";
}
END {
  print "</table>";
  print "</body>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...