如何使用awk格式化html中的文本

如何使用awk格式化html中的文本,html,bash,awk,sed,formatting,Html,Bash,Awk,Sed,Formatting,我想使用awk将我的表格格式化为html格式 cat table.txt COL1 COL2 COL4 COL5 COL3 BRCC hete 15869 105A 1 BRAC he 1799967 956G 1 BCAS he 7334543 369AFVC 2 RCA he 9534262 7806-14 4 RCA he 144848 1114A 5 RA he 206118 52A 5 BCAVV he 543304 3807TCD 5 BCA hoo 106091515 4308TD

我想使用awk将我的表格格式化为html格式

cat table.txt

COL1 COL2 COL4 COL5 COL3
BRCC hete 15869 105A 1
BRAC he 1799967 956G 1
BCAS he 7334543 369AFVC 2
RCA he 9534262 7806-14 4
RCA he 144848 1114A 5
RA he 206118 52A 5
BCAVV he 543304 3807TCD 5
BCA hoo 106091515 4308TDDSC 1
BCA hoo 206075 4563A 1
BCA hoo 799917 2612CDSA 1
BCA hoo 206076 513G 2
BCA hoom 16941 3113A 3
我的awk解决方案:

awk 'BEGIN {print "<table>"} ; {  print "<tr><td width="80">" $1 "</td><td width="80">" $2 "</td><td width="150">" $3 "</td><td width="150">" $4 "</td><td>" $5 "</td><tr>"} ; END { print "</table>"}' table.txt
一种使用awk生成html格式表格的解决方案

在table.html中

一种使用awk生成html格式表格的解决方案

在table.html中

因为我看到一个sed标记,所以您可能希望尝试以下方法:

sed '
1i \
<style> \
  .tbl { font-size:8.0pt; font-family:"Verdana", "sans-serif"; border-bottom:3px double black; border-collapse: collapse; } \
  .tbl th { border-bottom:3px double black;text-align:left; } \
  .tbl td, .tbl th { width:80px; } \
</style> \
<table class="tbl"> 
1 {
  s:[^ ]*:<th>&</th>:g
}
2,$ {
  s:[^ ]*:<td>&</td>:g
}
s:^:<tr>:;
s:$:</tr>:
$a </table>
' table.txt
输出::

.tbl{字体大小:8.0pt;字体系列:Verdana,无衬线;边框底部:3px双黑;边框折叠:折叠;文本对齐:左;} .tbl th{边框底部:3px双黑;} .tbl td,.tbl th{宽度:80px;} 第1列第2列第4列第5列第3列 BRCC hete 15869105A 1 BRAC he 1799967 956G 1 BCAS he 7334543 369AFVC 2 RCA he 9534262 7806-14 4 RCA he 144848 1114A 5 RA he 206118 52A 5 BCAVV he 543304 3807TCD 5 BCA hoo 106091515 4308TDDSC 1 BCA hoo 206075 4563A 1 BCA hoo 799917 2612 CDSA 1 BCA hoo 206076 513G 2 BCA hoom 16941 3113A 3 因为我看到一个sed标记,所以您可能希望尝试以下方法:

sed '
1i \
<style> \
  .tbl { font-size:8.0pt; font-family:"Verdana", "sans-serif"; border-bottom:3px double black; border-collapse: collapse; } \
  .tbl th { border-bottom:3px double black;text-align:left; } \
  .tbl td, .tbl th { width:80px; } \
</style> \
<table class="tbl"> 
1 {
  s:[^ ]*:<th>&</th>:g
}
2,$ {
  s:[^ ]*:<td>&</td>:g
}
s:^:<tr>:;
s:$:</tr>:
$a </table>
' table.txt
输出::

.tbl{字体大小:8.0pt;字体系列:Verdana,无衬线;边框底部:3px双黑;边框折叠:折叠;文本对齐:左;} .tbl th{边框底部:3px双黑;} .tbl td,.tbl th{宽度:80px;} 第1列第2列第4列第5列第3列 BRCC hete 15869105A 1 BRAC he 1799967 956G 1 BCAS he 7334543 369AFVC 2 RCA he 9534262 7806-14 4 RCA he 144848 1114A 5 RA he 206118 52A 5 BCAVV he 543304 3807TCD 5 BCA hoo 106091515 4308TDDSC 1 BCA hoo 206075 4563A 1 BCA hoo 799917 2612 CDSA 1 BCA hoo 206076 513G 2 BCA hoom 16941 3113A 3
问题1:打印问题1已解决,非常感谢!我将创建一个模板文件,包含所有html标记、css内容,并留下一些占位符。awk加载模板文件,读取输入,将数据填充到PlaceHolder中。通过这种方式,您可以在不更改awk脚本的数据填充逻辑的情况下更改模板的外观。@Kent谢谢您的好主意。。请举例说明你将如何解决这项任务?@kent a soution和一个使用模板的问题问题1:打印问题1已解决,非常感谢!我将创建一个模板文件,包含所有html标记、css内容,并留下一些占位符。awk加载模板文件,读取输入,将数据填充到PlaceHolder中。通过这种方式,您可以在不更改awk脚本的数据填充逻辑的情况下更改模板的外观。@Kent谢谢您的好主意。。你能举个例子说明你如何解决这个问题吗?@kent一个问题和一个使用模板的问题非常感谢,效果非常好。是否可以将列名下的文本对齐?我的原始输出是对齐的-co,例如COL5,其值是对齐的。仅可在样式部分中添加{text align:left;}\注意:\n是否可以在每列之间添加AWK中的多行字符串?所以我可以控制列之间的空格?就像我有原始代码一样?谢谢你的帮助@保罗我修好了,这在波斯特尼斯!书签,因为我总是搞砸CSS部分!就我个人而言,我可能会使用printf而不是print:printf%s\n,tag,widths[I],$I,tag as IMHO。当有多个值将它们与格式分开时,会更清晰一些,但是nbd。非常感谢,这非常有效。是否可以将列名下的文本对齐?我的原始输出是对齐的-co,例如COL5,其值是对齐的。仅可在样式部分中添加{text align:left;}\注意:\n是否可以在每列之间添加AWK中的多行字符串?所以我可以控制列之间的空格?就像我有原始代码一样?谢谢你的帮助@保罗我修好了,这在波斯特尼斯!书签,因为我总是搞砸CSS部分!就我个人而言,我可能会使用printf而不是print:printf%s\n,tag,widths[I],$I,tag as IMHO当有多个值将它们与格式分开时会更清晰一些,但是nbd。
COL1 COL2 COL4 COL5 COL3
===========================
col1 col2 col4 col5 col3
col1 col2 col4 col5 col3
col1 col2 col4 col5 col3
col1 col2 col4 col5 col3
===========================
awk 'BEGIN {
    split("80,80,150,150,", widths, ",")
    print "<style>\
        .my_table {font-size:8.0pt; font-family:\"Verdana\",\"sans-serif\"; border-bottom:3px double black; border-collapse: collapse; }\n\
        .my_table tr.header{border-bottom:3px double black;}\n\
        .my_table th {text-align: left;}\
    </style>"
    print "<table class=\"my_table\">"
}
NR == 1{
    print "<tr class=\"header\">"
    tag = "th"
}
NR != 1{
    print "<tr>"
    tag = "td"
}
{
    for(i=1; i<=NF; ++i) print "<" tag " width=\"" widths[i] "\">" $i "</" tag ">"
    print "</tr>"
}
END { print "</table>"}' table.txt > table.html
sed '
1i \
<style> \
  .tbl { font-size:8.0pt; font-family:"Verdana", "sans-serif"; border-bottom:3px double black; border-collapse: collapse; } \
  .tbl th { border-bottom:3px double black;text-align:left; } \
  .tbl td, .tbl th { width:80px; } \
</style> \
<table class="tbl"> 
1 {
  s:[^ ]*:<th>&</th>:g
}
2,$ {
  s:[^ ]*:<td>&</td>:g
}
s:^:<tr>:;
s:$:</tr>:
$a </table>
' table.txt