如何从bash中的html表的列中读取整数

时间:2015-01-05 11:28:28

标签: bash

我有一个html表:

<table>
  <tr><td colspan=2>"some text"</td><td>"last week"</td><td>"current week"</td><td>"Delta"</td></tr>
  <tr><td>"some text"</td><td>"some text"</td><td>integer</td><td>integer</td><td>integer</td></tr>
  <tr><td>"some text"</td><td>"some text"</td><td>integer</td><td>integer</td><td>integer</td></tr>
  <tr><td>"some text"</td><td>"some text"</td><td>integer</td><td>integer</td><td>integer</td></tr>
  <tr><td>"some text"</td><td>"some text"</td><td>integer</td><td>integer</td><td>integer</td></tr>
</table>

我想从&#34;当前周&#34;中提取每个整数。列,所以每行的第二个整数(没有第一行 - 标题行)。

2 个答案:

答案 0 :(得分:3)

使用

输入HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
        <table> <tr>
                <td colspan="2">"some text"</td>
                <td>"last week"</td>
                <td>"current week"</td>
                <td>"Delta"</td>
            </tr> <tr>
                <td>"some text"</td>
                <td>"some text"</td>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr> <tr>
                <td>"some text"</td>
                <td>"some text"</td>
                <td>integer</td>
                <td>integer</td>
                <td>integer</td>
            </tr> <tr>
                <td>"some text"</td>
                <td>"some text"</td>
                <td>integer</td>
                <td>integer</td>
                <td>integer</td>
            </tr> <tr>
                <td>"some text"</td>
                <td>"some text"</td>
                <td>integer</td>
                <td>integer</td>
                <td>integer</td>
            </tr> </table>
    </body></html>

$ xmllint --html --xpath "//td[text()='\"current week\"']/following::td[4]/text()" file_or_URL

或使用数字位置(1到...):简单地说:

$ xmllint --html --xpath "//tr[2]/td[4]/text()" file_or_URL

输出:

1

答案 1 :(得分:2)

Perl救援:有HTML::TableExtract

#!/usr/bin/perl
use warnings;
use strict;

use HTML::TableExtract;

my $te = 'HTML::TableExtract'->new( headers => [ 'current' ] );
$te->parse('<table>...</table>');
my $tab = ($te->tables)[0];
for my $row ($tab->rows) {
    print $row->[0], "\n";
}