如何计算在HTML表的列中显示数字的次数

时间:2014-08-20 17:10:41

标签: html bash

我有一张带有表格的HTML报告,我需要计算一个数字出现在特定列中的次数。这应该在bash中进行(在Fedora上) 我们来看下一个例子。我需要计算所有表格中3号和2号出现的次数(在第3列):
<tr>
<td>test11</td>
<td>test12</td>
<td>3</td>
<td>test14</td>
</tr>
<tr>
<td>test11</td>
<td>test12</td>
<td>3</td>
<td>test14</td>
</tr>
<tr>
<td>test11</td>
<td>test12</td>
<td>2</td>
<td>test14</td>
</tr>

5 个答案:

答案 0 :(得分:0)

我认为你最好还需要一个搜索表单来查询另一个查询。如果您需要知道除“3”之外的其他数字或信息怎么办?所以我创建了一个搜索功能来计算页面上的确切单词。

<强> HTML

<table border width="100%">
    <tr>
        <td>test11</td>
        <td>test12</td>
        <td>3</td>
        <td>test14</td>
    </tr>
    <tr>
        <td>test11</td>
        <td>test12</td>
        <td>3</td>
        <td>test14</td>
    </tr>
    <tr>
        <td>test11</td>
        <td>test12</td>
        <td>2</td>
        <td>test14</td>
    </tr>
</table>
<hr />
<form action="" method="post">
    <fieldset>
        <input type="text" class="text-input" id="filter" value="" /> <span id="filter-count"></span>

    </fieldset>
</form>

<强>的Javascript

$(document).ready(function () {
    $("#filter").keyup(function () {

        // Retrieve the input field text and reset the count to zero
        var filter = $(this).val(),
            count = 0;

        // Loop through the comment list
        $("table td").each(function () {

            // If the list item does not contain the text phrase fade it out
            if ($(this).text().search(new RegExp(filter, "i")) < 0) {
                $(this).fadeOut();

                // Show the list item if the phrase matches and increase the count by 1
            } else {
                $(this).show();
                count++;
            }
        });

        // Update the count
        var numberItems = count;
        $("#filter-count").text("Number of results = " + count);
    });
});

DEMO:http://jsfiddle.net/nobuts/0empj2e6/2/

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

从HTML中提取信息的正确方法是xpath

xpath '//tr/td[3]/text()' file.html |
sort | uniq | sort -rn

如果您没有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])

答案 3 :(得分:0)

快速正脏:

cat tab.html | tr -d '\n' | sed 's|</\?tr>|\n|g' | sed 's|</\?td>|\t|g' | tr -s '[:space:]' | cut -f4 | uniq -c

答案 4 :(得分:0)

使用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

打印:

3: 2
2: 1

但为此你需要安装Mojolicious