如何计算一个数字在HTML表格的列中出现的次数
我有一个带有表格的HTML报告,我需要计算一个数字在特定列中出现的次数。这应该是用bash on Fedora制作的。 让我们举下一个例子。我需要计算数字3和数字2出现在所有表的第3列的次数: 测试11 测试12 3. 测试14 测试11 测试12 3. 测试14 测试11 测试12 2. 测试14如何计算一个数字在HTML表格的列中出现的次数,html,bash,Html,Bash,我有一个带有表格的HTML报告,我需要计算一个数字在特定列中出现的次数。这应该是用bash on Fedora制作的。 让我们举下一个例子。我需要计算数字3和数字2出现在所有表的第3列的次数: 测试11 测试12 3. 测试14 测试11 测试12 3. 测试14 测试11 测试12 2. 测试14 我想你最好需要一张搜索表来进行另一个查询。如果您需要知道“3”以外的其他号码或信息,该怎么办?所以我做了一个搜索函数来精确计算页面上的单词 HTML Javascript 此处演示:使用gnu aw
我想你最好需要一张搜索表来进行另一个查询。如果您需要知道“3”以外的其他号码或信息,该怎么办?所以我做了一个搜索函数来精确计算页面上的单词 HTML Javascript
此处演示:使用gnu awk,您可以执行以下操作:
awk -v RS='</tr>' -v F='<td>' '$4~/>3</{a++; next} $4~/>2</{b++; next}
END{printf "3-count=%d, 2-count=%d\n", a, b}' file
3-count=2, 2-count=1
从HTML中提取信息的正确方法是使用以下内容 如果您没有xpath,那么您可以使用类似
#!/usr/bin/python
import lxml.html
import sys
from collections import defaultdict
d=defaultdict(int)
for f in sys.argv[1:]:
root = lxml.html.parse(f)
for item in root.xpath('//tr/td[3]/text()'):
d[item] += 1
for item in d:
print "%s occured %i times" % (item, d[item])
快n脏:
cat tab.html | tr -d '\n' | sed 's|</\?tr>|\n|g' | sed 's|</\?td>|\t|g' | tr -s '[:space:]' | cut -f4 | uniq -c
使用perl-Mojo::DOM解析器:
perl -Mojo -0777 -nlE '$c{$_->find("td")->[2]->text}++ for x($_)->find("tr")->each}{say "$_: $c{$_}" for keys %c' << EOF
<tr> <td>test11</td> <td>test12</td> <td>3</td> <td>test14</td> </tr>
<tr> <td>test21</td> <td>test22</td> <td>3</td> <td>test24</td> </tr>
<tr> <td>3</td> <td>2</td> <td>2</td> <td>3</td> </tr>
EOF
但对于这一点,您需要安装。您是指2秒和3秒的计数吗?还是两者加在一起?在我第3列的表格中,我有从1到4的数字。在最后我需要这个:1-x倍,2-y倍,3-t倍,4-z倍看看。另请看,我认为这不符合Bash解决方案的条件-:对不起,你是什么意思?Bash是一个流行的Unix命令shell。OP请求了一个在此环境下工作的解决方案。他的系统可能根本没有安装浏览器。哦,我没有看到那个关键词。只考虑html文档。谢谢你的解释这行得通,但如果我第一列有3,这会被计算,第三列中我需要计算的数字2不会被计算。这行得通,它会返回我需要的。非常感谢。还添加了一个快速而肮脏的Python解决方案。正如链接将告诉您的,xpath随Perl的XML::Path库一起提供。对于Python>=2.4,我认为类似的功能已经开箱即用。哎呀,我有点太快了-不是标准库的一部分,但很值得安装。这就是我想要的。很好的解决方案。这应该在许多计算机上运行,并且lxml模块应该安装在所有计算机上,但这没关系。非常感谢。但是没有python就不能使用xpath?有很多实现,我链接到的xpath命令是Perl,您可以很容易地获得C和Java等的xpath库。有一个向下滚动的实现列表,但它必然不完整,可能已经严重过时。
#!/usr/bin/python
import lxml.html
import sys
from collections import defaultdict
d=defaultdict(int)
for f in sys.argv[1:]:
root = lxml.html.parse(f)
for item in root.xpath('//tr/td[3]/text()'):
d[item] += 1
for item in d:
print "%s occured %i times" % (item, d[item])
cat tab.html | tr -d '\n' | sed 's|</\?tr>|\n|g' | sed 's|</\?td>|\t|g' | tr -s '[:space:]' | cut -f4 | uniq -c
perl -Mojo -0777 -nlE '$c{$_->find("td")->[2]->text}++ for x($_)->find("tr")->each}{say "$_: $c{$_}" for keys %c' << EOF
<tr> <td>test11</td> <td>test12</td> <td>3</td> <td>test14</td> </tr>
<tr> <td>test21</td> <td>test22</td> <td>3</td> <td>test24</td> </tr>
<tr> <td>3</td> <td>2</td> <td>2</td> <td>3</td> </tr>
EOF
3: 2
2: 1