私はこれをさまざまなインターネット検索で把握しようとしており、stackoverflowを通して掘り下げています。私は、これを説明できるように努力します。awkが存在しない場合はファイルをスキップします
私は、設定リポジトリディレクトリを検索するスクリプトを用意しています。このスクリプトは、ジュニパーとシスコのルータとスイッチのディレクトリごとに配置されています。それぞれのデバイスディレクトリには、私が関心を持っているファイル "show.version"と "show.chassis.hardware"があります。 2番目のファイル "show.chassis.hardware"は、シスコのボックスにあるコマンドではないため、シスコのデバイスディレクトリにファイルは存在しません。また、デバイスがJuniperかCiscoかを簡単に教えてくれる名前付けスキームはありません。これも私のスクリプトが存在する理由の一部です。
さまざまなモデルやソフトウェアバージョンでもshow.versionファイルが異なる形式(CiscoとJuniperの両方)で出力されるため、私のawkは私たちが遭遇するすべてのフィールドがいっぱいです。
スクリプト:それは私がスクリプトを実行したときにどのように見える
#!/usr/local/bin/zsh
svn="$HOME/svn/nw_config_data/"
case "$1" in
("-a")
hosts=""
;;
("-b")
hosts=".bb.domain.net"
;;
("-c")
hosts=".cpe.domain.net"
;;
("-e")
hosts=".etech.domain.net"
;;
("-k")
hosts=".core.domain.net"
;;
("-m")
hosts=".maint.domain.net"
;;
("-o")
hosts=".ohgov.domain.net"
;;
esac
dirs=($(ls -d $svn*$hosts*))
for hostdir in $dirs
do host=$(echo $hostdir | grep -Eo "(\w|\.|-)*$")
awk -v h=$host '/^Model/{m=$2} /^Model number/{m=$4} /^\*0/{m=$2}
/^JUNOS Base OS boot/{v=$5} /^Junos:/{v="["$2"]"} /^BOOTLDR:/{v=$7}
/^JUNOS EX Software Suite/{v=$5} /^ROM:/{v=$5} /^JUNOS Software
Release/{v=$4} /^Chassis/{s=$2} /^Motherboard serial number/{s=$3}
END {if(m!="number") {printf("%s %s %s %s\n",h,m,v,s)}}'
"$hostdir/show.version" "$hostdir/show.chassis.hardware"
done
は:
私はそれが% cver -b
device1-e0.bb.domain.net ex4300-24t [14.1X53-D25.2] Serial#
device2-e0.bb.domain.net ex4300-24t [14.1X53-D25.2] Serial#
device3-e1.bb.domain.net C3750 12.1(14r)EA1a, Serial#
device4-r0.bb.domain.net m7i [13.3R6.5] Serial#
...
に見えるようにしたいどのような
% cver -b
device1-e0.bb.domain.net ex4300-24t [14.1X53-D25.2] Serial#
device2-e0.bb.domain.net ex4300-24t [14.1X53-D25.2] Serial#
awk: can't open file /home/clmbn eng2/a/rwalker/svn/nw_config_data/device3-e1.bb.domain.net/show.chassis.hardware
input record number 55, file /home/clmbn-eng2/a/rwalker/svn/nw_config_data/device3-e1.bb.domain.net/show.chassis.hardware
source line number 1
device4-r0.bb.domain.net m7i [13.3R6.5] Serial#
...
私は13のディレクトリを持ちます"show.chassis.hardware"ファイルを持っていないが、必要なすべての情報を持っている "show.version"ファイルを持っているそれでは。ファイルがないディレクトリが1つありますが、そのデバイスは置き換えられるため問題ありません。
私が読んできたことから、awkはこれを行うことができないかもしれませんが、そこにいる誰かがそれを動作させる方法を知っているという信念があります。私のアプローチ(シェル& awkスクリプト)がうまくいかず、何か他のもの(PerlやPythonなど)でやる必要がある場合は、スクリプトを1つに変換するのに十分なことを学ぶまで完全に固執しますそれらの言語の
また、私たちはこのサーバにbashをインストールしていないので、私は管理者ではないので、私たちがいつになるのか分かりません。ファイルが存在し、通常のファイルであれば
Beautiful!それはまさに私が探していたものでした。ありがとうございました! – rewalker3
アレイのオプションだけが許可されるように、このコマンドを「ロック」するにはどうすればよいですか?私はまた、これにヘルプコマンドをドロップして、アプローチの確信がないです。このスクリプトはこの数日間進化したので、前の質問で私が何を持っていたかを見ることができます。 https://stackoverflow.com/questions/47049207/combine-multiple-awk-output-to-print-on-one-line – rewalker3
@ rewalker3より一般的なオプションの解析では、zparseoptsまたはgetoptsを調べる必要があります。スクリプトを修正して、これら2つのケースだけを説明しました。 – muru