Awk
使用 AWK 填寫 HTML 文件中的多列
使用 AWK 我正在嘗試根據先前的值填寫 HTML 表(行/列)。類似於 excel。
例如:
table user$ csv2html.awk table.csv rowing | fast | good | fast | good swim | | | | slow | | increase | late | golf | red | bad
我希望這個 html 表變成以下內容:
table rowing | fast | good rowing | fast | good swim | fast | good swim | fast | slow swim | fast | increase swim | late | increase golf | red | bad
該表可以有任意數量的列/行,並且值可以在許多不同的單詞中有所不同。我只是想了解如何解析 html,然後填寫我在每列/行中找到的值。
輸出必須是保持格式的新 html 文件。
更新:
<html><body><table> <tr> <th>Column1</th> <th>Column2</th> <th>Column3</th> </tr> <tr> <td>rowing</td> <td>fast</td> <td>good</td> </tr> <tr> <td></td> <td>fast</td> <td>good</td> </tr> <tr> <td>swim</td> <td></td> <td></td> </tr> </table></body></html>
awk
您需要在腳本中添加類似這樣的內容:for(i=1;i<=NF;i++){ if($i==""){$i=last[i]} last[i]=$i }
由於您不向我們展示您的腳本,因此您必須自己做。
從您的結果表開始,它可能如下所示:
$ awk -F ' *\| *' ' BEGIN{OFS="|"} { for(i=1;i<=NF;i++){ if($i==""){$i=last[i]} last[i]=$i }$1=$1 }1' table rowing|fast|good rowing|fast|good swim|fast|good swim|fast|slow swim|fast|increase swim|late|increase golf|red|bad
然而!我假設您使用適當的 html 解析器而不是
awk
. 我可以推薦python
的beautifulsoup
模組。或者更好的是,使用適當的數據分析工具,例如
pandas
,它通過它的方法提供了這個功能ffill
:
ffill
: 將最後一個有效觀察值向前傳播到下一個有效值#!/usr/bin/env python3 import pandas as pd with open('file.html') as f: html = f.read() df = pd.read_html(html)[0] df = df.ffill() df.head()
輸出:
Column1 Column2 Column3 0 rowing fast good 1 rowing fast good 2 swim fast good
見這裡。