AWKを使用してHTMLファイルの複数列を埋める

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>

ベストアンサー1

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パーサーを使用することをお勧めしますawkpythonbeautifulsoup基準寸法。

またはまたはより良い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

ねえ

おすすめ記事