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パーサーを使用することをお勧めします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
ねえ。