表形式で出力する

表形式で出力する

Perlスクリプトでsnmpwalkを実行し、indexとdescの場合、同じ行に各ホスト名がある場合など、一部の相関関係の出力をテーブルに入れることができる場合は、bashにスクリプトがありますが出力があります。私が欲しい協会なので、あなたの助けが必要です

#!/bin/bash
Rep_Scripts='/home/scripts'
out_file='/home/scripts/out_file'
rm -rf $Rep_Scripts/out_file

for i in `cat $Rep_Scripts/IP_ALU_LIST.txt | awk '{print}'`
do
read hostname ip <<< $(echo $i |sed 's/;/ /')


        echo "${hostname} ==> ${ip} If_Name" >> out_file
        snmpwalk -v2c -c ${ip} OID>> out_file
        echo "${hostname} ==> ${ip} Global_If_Index" >> out_file
         snmpwalk -v2c -c ${ip} OID >>  out_file
        echo "${hostname} ==> ${ip} If_Statut" >> out_file
        snmpwalk -v2c -c  ${ip} OID >> out_file


done

IP_ALU_LIST.txtにあります。

router2;89.100.12.100
router3;100.100.100.100

答え1

まず、質問を再設定してください。

各IP /ホストに対してsnmpwalkからデータを入力し、各OIDのテーブルを出力するPerlスクリプトを作成する方法。

第二に、あなたのサンプルsnmpwalkコマンドは意味がありません。OID変数であれば、これは意味があるかもしれません。おそらくsnmpwalk -v2 -c public ${ip} ${OID}を使用しようとしています。

次のことができます。

#!/usr/bin/env perl -w
# Invoke via $0 <ip-address-file> <OIDs ... >
$input_file=shift @ARGV;
$oids=join(" ",@ARGV);
$oids gt '' || die "Please provide at least one OID for snmpget to fetch"

format STDOUT_TOP = 
@<<<<<<<<<<<  @>>>>>>>>>>>>>>>>>>>
$ip,$hostname
.
format STDOUT = 
@<<<<<<<<<<<<<<<<<<<<< @||||||||||||| @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$oid,$type,$value
.
$^L="\n\n\n";

# parse inputfile
open(IPFILE,$input_file) or die "Cannot open $input_file";
while (my $host=<IPFILE>) { 
  chomp $host;
  my ($hostname,$ip) = split(";",$host,2);

  open(SNMP,"snmpget -v2 -cpublic $ip $oids |") or die "Cannot run snmpwalk"
  print "$hostname => $ip :\n";
  while ($_ = <SNMP>) { 
       if ( ($oid,$type,$value) = /^(.*?) = ([^:]+): (.*)$/ ) { 
          write
       } else {
          print STDERR  "Could not parse this output:\n  $_";
       }
  }
  $- = 0;
}

snmpget各OIDについて1行が出力される。バラよりhttp://linux.die.net/man/1/perlformPerl 「フォーマット」と関連writeコマンドに関する追加情報。$^Lページ区切り記号を既存のページポップ文字(CTRL-L)の代わりに3つの改行文字に設定します。この$- = 0;ビットは、デフォルトで次に「書き込み」が呼び出されたときに新しいページ(新しいヘッダーを含む)を強制的に生成します。次回呼び出されると、新しい値が表示されます$hostname$ip

関連情報