首页 > 解决方案 > Bash,sed,从 html 行中获取 2 个特定字符串,存储为 csv

问题描述

问题

我解析了 html 文件,这里是结果示例。

...

<p style="position:absolute;top:552px;left:26px;white-space:nowrap" class="ft1729"><a href="114281">114281</a></p>
<p style="position:absolute;top:403px;left:688px;white-space:nowrap" class="ft1729"><a href="114282">114282</a></p>
<!-- Page 18 -->
<p style="position:absolute;top:956px;left:485px;white-space:nowrap" class="ft1829"><a href="145041">145041</a></p>
<p style="position:absolute;top:1192px;left:485px;white-space:nowrap" class="ft1829"><a href="112476">112476</a></p>
<p style="position:absolute;top:675px;left:485px;white-space:nowrap" class="ft1829"><a href="145040">145040</a></p>
<p style="position:absolute;top:430px;left:59px;white-space:nowrap" class="ft1829"><a href="430258">430258</a></p>
<p style="position:absolute;top:1063px;left:51px;white-space:nowrap" class="ft1829"><a href="107267">107267</a></p>
<p style="position:absolute;top:586px;left:246px;white-space:nowrap" class="ft1829"><a href="145042">145042</a></p>
<p style="position:absolute;top:156px;left:446px;white-space:nowrap" class="ft1829"><a href="440332">440332</a></p>
<!-- Page 19 -->
<p style="position:absolute;top:1205px;left:53px;white-space:nowrap" class="ft1938"><b>1&#160;790,-&#160;</b>|<a href="457710">&#160;457710</a></p>
<p style="position:absolute;top:1205px;left:634px;white-space:nowrap" class="ft1938"><b>2 290,-&#160;</b>|<a href="464429">&#160;464429</a></p>
<p style="position:absolute;top:924px;left:353px;white-space:nowrap" class="ft1938"><b>2 590,-&#160;</b>|<a href="464430">&#160;464430</a></p>
<p style="position:absolute;top:924px;left:53px;white-space:nowrap" class="ft1938"><b>1&#160;990,-&#160;</b>|<a href="457711">&#160;457711</a></p>
<p style="position:absolute;top:1205px;left:354px;white-space:nowrap" class="ft1938"><b>2&#160;990,-&#160;</b>|<a href="465337">&#160;465337</a></p>
<p style="position:absolute;top:344px;left:642px;white-space:nowrap" class="ft1938"><b>4&#160;990,-&#160;</b>|<a href="460435">&#160;460435</a></p>
<p style="position:absolute;top:924px;left:634px;white-space:nowrap" class="ft1938"><b>3&#160;990,-&#160;</b>|<a href="464432">&#160;464432</a></p>
<p style="position:absolute;top:617px;left:641px;white-space:nowrap" class="ft1938"><b>2&#160;990,-&#160;</b>|<a href="436458">&#160;436458</a></p>
<!-- Page 20 -->
<p style="position:absolute;top:589px;left:637px;white-space:nowrap" class="ft2029"><a href="217822">217822</a></p>
<p style="position:absolute;top:853px;left:32px;white-space:nowrap" class="ft2029"><a href="217824">217824</a></p>
<p style="position:absolute;top:616px;left:333px;white-space:nowrap" class="ft2029"><a href="218228">218228</a></p>
<p style="position:absolute;top:894px;left:333px;white-space:nowrap" class="ft2029"><a href="226105">226105</a></p>

...

有没有一些简单的方法从上面的输出中得到下面的输出?第一个值page来自<!-- Page PAGE -->,第二个值NUMBER来自<a href="NUMBER">。如果PAGE<!-- Page 1 -->,请改为用字符串Title替换1

...

18,145041
18,112476
18,145040
18,107275
18,145042
18,440332
19,457710
19,464429

...

我只是为了这个数字而尝试过。

grep '<a href=' file.html | sed -n '/<a href="/,/">/p'

但是没有效果。

谢谢。

标签: bashcsvsed

解决方案


像这样awk的人可以吗?

awk '/Page/ {h=$3} /-- Page 1 --/ {h="Title"} /href=/ && h {split($0,a,"\"");print h","a[6]}'
18,145041
18,112476
18,145040
18,430258
18,107267
18,145042
18,440332
19,457710
19,464429
19,464430
19,457711
19,465337
19,460435
19,464432
19,436458
20,217822
20,217824
20,218228
20,226105

何时Page找到将第 3 列存储在h(页码)中。
然后如果href,用双引号分割行并找到值并用页面值打印。


推荐阅读