Ich habe zwei verschiedene Funktionen, die ich geschrieben habe, jede mit ihrer eigenen AWK, um nach einer bestimmten Datei in mehreren Verzeichnissen zu suchen und die Informationen auszugeben, die ich brauche. Beide Funktionen drucken den DATEINAME und ein bestimmtes Feld, das ich brauche, und funktionieren ganz gut alleine. Ich möchte sie für eine robustere Ausgabe kombinieren.Mehrere awk-Ausgabe kombinieren, um auf einer Zeile zu drucken
Ich bin kein Programmierer. Ich schrieb diese, während ich über Awk las, als ich ging.
Funktion 1
cver() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
("-h"|help) echo "'cver' allows us to see the software version
running on all Company Juniper devices.\n'cver' is especially helpful
in determining which devices require a software upgrade.\n\nOptions
are -b for bb, -c for cpe, -e for etech, -k for core, and -o for
ohgov.\n\nUse grep to find specific information. Ex: cver -c | grep
name";;
(*) echo "Unrecognized or incomplete command.\nUse -h for help.";;
esac
[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 ~ "^[[]" SRCH
{sub ("/show.version", "", FILENAME); sub (".*/", "", FILENAME);
print $5 " " FILENAME}' ~/svn/nw_config_data/*${X}.domain.net/show.version | sort
}
Input/Output Beispiel:
% cver -k <---input
[11.4R10.3] device.core.domain.net <---ouput
Function 2
cmod() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
esac
awk '/Model/ {sub ("/show.version", "", FILENAME);
sub (".*/", "", FILENAME); print FILENAME " " $2}'
~/svn/nw_config_data/*${X}.domain.net/show.version | sort
}
Input/Output Beispiel:
% cmod -k <---input
device.core.domain.net mx480 <---output
Was diese Skripte tun, geht in unser Verzeichnis ~/svn/nw_config_data/und dort ist ein Verzeichnis für jedes Gerät, das wir implementiert haben. In jedem Geräteverzeichnis befinden sich Dateien für die Konfiguration sowie einige show-Befehle. Die Datei, um die ich mir Sorgen mache, ist die Datei show.version und ein paar Zeilen Information. Für "cver" möchte ich die Boot-Informationen des JUNOS Base OS. Für "cmod" möchte ich die Informationen für Model. Das "X" greift dann auf verschiedene Geräteoptionen wie -b = "bb" (device.bb.domain.net)
Unten ist ein Beispiel für die Datei show.version.
Hostname: device-r0
Model: ex3300-24t
JUNOS Base OS boot [12.3R7.7]
JUNOS Base OS Software Suite [12.3R7.7]
JUNOS Kernel Software Suite [12.3R7.7]
JUNOS Crypto Software Suite [12.3R7.7]
JUNOS Online Documentation [12.3R7.7]
JUNOS Enterprise Software Suite [12.3R7.7]
JUNOS Packet Forwarding Engine Enterprise Software Suite [12.3R7.7]
JUNOS Routing Software Suite [12.3R7.7]
JUNOS Web Management [12.3R7.7]
JUNOS FIPS mode utilities [12.3R7.7]
Ich habe versucht, diese letzten paar Tage für jede Art von Beispielen zu suchen, die ähnlich sein würden und kam zu kurz. Ich sah eine Antwort, die die Awk-Pipe sagte, aber es druckt nur die zweite Awk-Info.
Ich versuchte dann & & das awk anstatt es zu leiten, und es brachte mich näher, aber druckt das erste awk dann das zweite awk auf unterschiedlichen Linien und ich will sie kombiniert haben.
& & Beispiel:
cver() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
("-h"|help) echo "'cver' allows us to see the software version
running on all Company Juniper devices.\n'cver' is especially helpful
in determining which devices require a software upgrade.\n\nOptions
are -b for bb, -c for cpe, -e for etech, -k for core, and -o for
ohgov.\n\nUse grep to find specific information. Ex: cver -c | grep
name";;
(*) echo "Unrecognized or incomplete command.\nUse -h for help.";;
esac
[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 ~ "^[[]" SRCH
{sub ("/show.version", "", FILENAME); sub (".*/", "", FILENAME);
print $5 " " FILENAME}' ~/svn/nw_config_data/*${X}.domain.net/show.version
| sort && awk '/Model/ {sub ("/show.version", "", FILENAME);
sub (".*/", "", FILENAME); print $2}'
~/svn/nw_config_data/*${X}.domain.net/show.version | sort
Input/Output Beispiel:
% cver -k <---input
[11.4R10.3] device.core.domain.net <---output
mx480 <---output
ich die Eingabe/Ausgabe sein wollen:
% cver -k <---input
device.core.domain.net mx480 [11.4R10.3] <---output
Was ich den Druck Teil vorstellen, von Der Befehl sieht wie folgt aus:
print FILENAME " " $2 " " $5
Ich habe auch versucht, das Hinzufügen/Model/& & $ 2 auf meine erste Funktion, aber es macht mir keine Ausgabe geben, und ich bin gerade an dieser Stelle verloren.
Beispiel:
cver() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
("-h"|help) echo "'cver' allows us to see the software version
running on all Company Juniper devices.\n'cver' is especially helpful
in determining which devices require a software upgrade.\n\nOptions
are -b for bb, -c for cpe, -e for etech, -k for core, and -o for
ohgov.\n\nUse grep to find specific information. Ex: cver -c | grep
name";;
(*) echo "Unrecognized or incomplete command.\nUse -h for help.";;
esac
[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 && /Model/ && $2 ~ "^[[]" SRCH
{sub ("/show.version", "", FILENAME); sub (".*/", "", FILENAME);
print FILENAME " " $2 " " $5}' ~/svn/nw_config_data/*${X}.domain.net/show.version | sort
Ich vermute, dass Sie eher eine Antwort erhalten würden, wenn Sie eine geeignete Stichprobe Ihrer Eingabedaten gezeigt hätten ... und dann, getrennt, welchen Aspekt davon Sie zu extrahieren versuchen. –
Ich werde die Frage bearbeiten, um weitere Informationen anzuzeigen. Vielen Dank. – rewalker3
Bearbeitungen sind jetzt vorhanden. Hoffentlich hilft das. – rewalker3