Shell 使用awk处理输入流,然后使用sed处理输入流
我想从选项卡分隔的文本文件创建一个html表。 首先,我尝试使用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!
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>";
}