3

テキスト ファイルから統計情報を表示するための html テーブルを作成する際に問題が発生しています。これを改善する方法は 100 通りあると思いますが、次の方法があります。

(次のスクリプトのコメントは出力を示しています)

#!/bin/bash

function getapistats () {
    curl -s http://api.example.com/stats > api-stats.txt
    awk {'print $1'} api-stats.txt > api-stats-int.txt
    awk {'print $2'} api-stats.txt > api-stats-fqdm.txt
}

# api-stats.txt example
#    992 cdn.example.com
#    227 static.foo.com
#    225 imgcdn.bar.com
# end api-stats.txt example

function get_int () {

    for i in `cat api-stats-int.txt`;
        do echo -e "<tr><td>${i}</td>";
    done
}

function get_fqdn () {

    for f in `cat api-stats-fqdn.txt`;
        do echo -e "<td>${f}</td></tr>";
    done

}

function build_table () {

echo "<table>";
echo -e "`get_int`" "`get_fqdn`";
#echo -e "`get_fqdn`";
echo "</table>";
}

getapistats;

build_table > api-stats.html;

# Output fail :|
# <table>
# <tr><td>992</td>
# <tr><td>227</td>
# <tr><td>225</td><td>cdn.example.com</td></tr>
# <td>static.foo.com</td></tr>
# <td>imgcdn.bar.com</td></tr>

# Desired output:
# <tr><td>992</td><td>cdn.example.com</td></tr>
# ...
4

3 に答える 3

11

これは、純粋な awk で行うのはかなり簡単です。

curl -s http://api.example.com/stats > api-stats.txt
awk 'BEGIN { print "<table>" }
     { print "<tr><td>" $1 "</td><td>" $2 "</td></tr>" }
     END   { print "</table>" }' api-stats.txt > api-stats.html

Awk は、このような用途向けに作られています。

于 2012-07-14T21:34:36.500 に答える
6

少なくとも 1 つの awk で実行できます。

curl -s http://api.example.com/stats | awk '
    BEGIN{print "<table>"} 
    {printf("<tr><td>%d</td><td>%s</td></tr>\n",$1,$2)}
    END{print "</table>"}
' 
于 2012-07-14T21:37:02.007 に答える
0

これはbashで実行できます;)

    while read -u 3 a && read -u 4 b;do
      エコー $a$b;
    完了 3</etc/passwd 4</etc/services

しかし、私の経験では、通常、bash/awk/etc でこのようなことを行うのは悪いことです。

コードで使用した機能は、bash のマニュアル ページに深く埋め込まれています...

たとえば、この種のデータ処理には実際の言語を使用することをお勧めします: (ruby または python)

于 2012-07-14T19:43:45.397 に答える