Shell 使用awk处理输入流,然后使用sed处理输入流

Shell 使用awk处理输入流,然后使用sed处理输入流,shell,sed,awk,Shell,Sed,Awk,我想从选项卡分隔的文本文件创建一个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!

我想从选项卡分隔的文本文件创建一个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'1i\
\
\
1s///g
1 s/*/&/
1.s///g
1.s/*/&/
'
我的问题是,在处理sed命令时,输入文件的第一行丢失

有没有关于用第一行输入sed的提示?欢迎为任何外壳提供便携式解决方案

更新: 脚本名为: $/脚本
第一行数据包含各列的标题,但缺少这一行。

仅使用awk。它的输出没有任何警告。验证器说“cols”不是有效的属性,所以我忽略了它

您可能希望使用一个函数来构建表行,为它传递所构建行的类型的标记——“th”或“td”

#html-table.awk——从制表符分隔的文件创建包含html表的网页。
开始{
FS=“\t”;
打印“”;
打印“”;
打印“”;
打印“”;
打印“”;
打印“”;
}
NR==1{
打印“”;
打印“”;
对于(i=1;i=1{
打印“”;
对于(i=1;i它是什么意思:“输入文件的第一行丢失”?这是否意味着表格标题不是来自输入文件,而是来自其他地方(硬编码,不同的文件)?
# 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>";
}