【问题标题】:How to format text in html using awk如何使用awk格式化html中的文本
【发布时间】:2017-05-31 06:30:37
【问题描述】:

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

猫表.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

我有两个问题:

1.问题:

我需要添加{print "&lt;table&gt;"}字体样式,如:

awk 'BEGIN {print "<table style='font-size:8.0pt;font-family:"Verdana","sans-serif"'>"} ;

...

但是引用有错误:

awk: cmd. line:1: BEGIN {print "<table style=font-size:8.0pt
awk: cmd. line:1:              ^ unterminated string
awk: cmd. line:1: BEGIN {print "<table style=font-size:8.0pt
awk: cmd. line:1:              ^ syntax error
zsh: no such file or directory: font-family:Verdana,sans-serif>"} ; {  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>"}

2。问题:

我想用“======”标记在我的表格中添加“边框”。所以输出看起来像:

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
===========================

【问题讨论】:

  • 问题一:print "&lt;table style=\047font-size:8.0pt;font-family:\"Verdana\",\"sans-serif\"\047&gt;"
  • 问题1已解决,非常感谢!
  • 我会创建一个模板文件,其中包含所有这些 html 标签、css 内容,并留下一些占位符。并且 awk 加载模板文件,并读取输入,将数据填充到占位符中。通过这种方式,您可以在不更改数据填充逻辑(awk 脚本)的情况下更改模板(外观)。
  • @Kent 谢谢你的好主意.. 请你创建一个例子你将如何解决这个任务?
  • @kent a soution and a question using templates Metaprogramming in awk

标签: html bash awk sed formatting


【解决方案1】:

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

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

你进入table.html

【讨论】:

  • 非常感谢,效果很好。是否可以在列名下“对齐”文本?我的原始输出是对齐的 - 例如 COL5,它的值是对齐的。
  • 只有,你可以在样式部分添加th {text-align: left;}\,注意:\是awk中的多行字符串
  • 是否可以在每列之间添加 ?所以我可以控制列之间的空间?就像我有我的原始代码?感谢您的帮助!
  • @Paul 我修好了,这个在帖子里
  • 不错!书签,因为我总是搞砸 CSS 部分!就我个人而言,我可能会使用 printf 而不是 print:printf "&lt;%s width=\"%d\"&gt;%s&lt;/%s&gt;\n", tag, widths[i], $i, tag,因为恕我直言,当有多个值将它们与格式分开时会更清楚一点,但是 nbd。
【解决方案2】:

因为我看到了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

输出:

<style> 
  .tbl { font-size:8.0pt; font-family:"Verdana", "sans-serif"; border-bottom:3px double black; border-collapse: collapse; text-align:left;} 
  .tbl th { border-bottom:3px double black; } 
  .tbl td, .tbl th { width:80px; } 
</style> 
<table class="tbl">
<tr><th>COL1</th> <th>COL2</th> <th>COL4</th> <th>COL5</th> <th>COL3</th></tr>
<tr><td>BRCC</td> <td>hete</td> <td>15869</td> <td>105A</td> <td>1</td></tr>
<tr><td>BRAC</td> <td>he</td> <td>1799967</td> <td>956G</td> <td>1</td></tr>
<tr><td>BCAS</td> <td>he</td> <td>7334543</td> <td>369AFVC</td> <td>2</td></tr>
<tr><td>RCA</td> <td>he</td> <td>9534262</td> <td>7806-14</td> <td>4</td></tr>
<tr><td>RCA</td> <td>he</td> <td>144848</td> <td>1114A</td> <td>5</td></tr>
<tr><td>RA</td> <td>he</td> <td>206118</td> <td>52A</td> <td>5</td></tr>
<tr><td>BCAVV</td> <td>he</td> <td>543304</td> <td>3807TCD</td> <td>5</td></tr>
<tr><td>BCA</td> <td>hoo</td> <td>106091515</td> <td>4308TDDSC</td> <td>1</td></tr>
<tr><td>BCA</td> <td>hoo</td> <td>206075</td> <td>4563A</td> <td>1</td></tr>
<tr><td>BCA</td> <td>hoo</td> <td>799917</td> <td>2612CDSA</td> <td>1</td></tr>
<tr><td>BCA</td> <td>hoo</td> <td>206076</td> <td>513G</td> <td>2</td></tr>
<tr><td>BCA</td> <td>hoom</td> <td>16941</td> <td>3113A</td> <td>3</td></tr>
</table>

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签