テーブルの Bash 出力配列

テーブルの Bash 出力配列

私は初めてbashに触れ、いくつかの小さなスクリプトを作って学びようとしています。

同時に、複数のドメインのDNSエントリを見つけるために小さなスクリプトを作成しました。ドメインは属性として提供されます。

COUNTER=0
DOMAINS=()

for domain in "$@"
do
    WOUT_WWW=$(dig "$domain" +short)
    if (( $(grep -c . <<<"$WOUT_WWW") > 1 )); then WOUT_WWW="${WOUT_WWW##*$'\n'}" ; fi

    WITH_WWW=$(dig "www.${domain}" +short)
    if (( $(grep -c . <<<"$WITH_WWW") > 1 )); then WITH_WWW="${WITH_WWW##*$'\n'}" ; fi


    DOMAINS[$COUNTER]="$domain|$WOUT_WWW|$WITH_WWW"
    COUNTER=$(($COUNTER+1))
done

それでは、新しい「多次元」配列を繰り返して、mysqlテーブルと同じ出力を提供したいと思います。

+------------------------------+
| Row 1    | Row 2  | Row 3    |
+------------------------------+
| Value    | Value  | Value    |
+------------------------------+

どうすればいいですか?

ベストアンサー1

perlのモジュールの使用Text::ASCIITable(複数行のセルもサポートされています):

print_table() {
  perl -MText::ASCIITable -e '
    $t = Text::ASCIITable->new({drawRowLine => 1});
    while (defined($c = shift @ARGV) and $c ne "--") {
      push @header, $c;
      $cols++
    }
    $t->setCols(@header);
    $rows = @ARGV / $cols;
    for ($i = 0; $i < $rows; $i++) {
      for ($j = 0; $j < $cols; $j++) {
        $cell[$i][$j] = $ARGV[$j * $rows + $i]
      }
    }
    $t->addRow(\@cell);
    print $t' -- "$@"
}

print_table Domain 'Without WWW'    'With WWW' -- \
            "$@"   "${WOUT_WWW[@]}" "${WITH_WWW[@]}"

ここで、WOUT_WWW合計WITH_WWW配列は次のように構成されます。

for domain do
  WOUT_WWW+=("$(dig +short "$domain")")
  WITH_WWW+=("$(dig +short "www.$domain")")
done

これは作る:

.---------------------------------------------------------------------.
| Domain            | Without WWW    | With WWW                       |
+-------------------+----------------+--------------------------------+
| google.com        | 216.58.208.142 |                 74.125.206.147 |
|                   |                |                 74.125.206.104 |
|                   |                |                 74.125.206.106 |
|                   |                |                 74.125.206.105 |
|                   |                |                 74.125.206.103 |
|                   |                |                  74.125.206.99 |
+-------------------+----------------+--------------------------------+
| stackexchange.com |  151.101.65.69 | stackexchange.com.             |
|                   |   151.101.1.69 |                   151.101.1.69 |
|                   | 151.101.193.69 |                 151.101.193.69 |
|                   | 151.101.129.69 |                 151.101.129.69 |
|                   |                |                  151.101.65.69 |
+-------------------+----------------+--------------------------------+
| linux.com         |  151.101.193.5 | n.ssl.fastly.net.              |
|                   |   151.101.65.5 | prod.n.ssl.us-eu.fastlylb.net. |
|                   |    151.101.1.5 |                   151.101.61.5 |
|                   |  151.101.129.5 |                                |
'-------------------+----------------+--------------------------------'

おすすめ記事