2017-01-16 28 views
1

我想使用awk將表格格式化爲html格式。如何在HTML中使用awk格式化文本

貓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 

我有2個問題:

1.問題:

我需要添加{print "<table>"}字體樣式如:

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

問題1:'打印 「<表式= \ 047font尺寸:8.0pt;字型家族:\」 宋體\」 ,\「sans-serif \」\ 047>「' –

+0

問題1已解決,非常感謝! – Paul

+1

我會創建一個模板文件,所有這些html標籤,css的東西,並留下一些地方持有人。 awk加載模板文件,並讀取輸入,將數據填入佔位符。通過這種方式,您可以在不更改數據填充邏輯(awk腳本)的情況下更改模板(外觀和感覺)。 – Kent

回答

3

一個解決方案使用awkhtml格式

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得到生成表格,

output html format

+0

謝謝你很多,這很棒。將可能「對齊」列名下的文本?我原來的輸出是對齊的 - 比如COL5和它的值是一致的。只有 – Paul

+0

,你可以在style部分添加'th {text-align:left;}'\,注意:\是'awk'中的多行字符串 –

+0

可以在每列之間添加?所以我可以控制列之間的空格?像我有我的原始代碼?謝謝你的幫助! – Paul

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>