Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算一个数字在HTML表格的列中出现的次数_Html_Bash - Fatal编程技术网

如何计算一个数字在HTML表格的列中出现的次数

如何计算一个数字在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

我有一个带有表格的HTML报告,我需要计算一个数字在特定列中出现的次数。这应该是用bash on Fedora制作的。 让我们举下一个例子。我需要计算数字3和数字2出现在所有表的第3列的次数: 测试11 测试12 3. 测试14 测试11 测试12 3. 测试14 测试11 测试12 2. 测试14

我想你最好需要一张搜索表来进行另一个查询。如果您需要知道“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