2016-07-10 10 views
-1

Ich gehe durch Shell Scripting Online-Lektionen als meine Arbeit erfordert, dass ich Shell-Skripting lernen.Verstehen einer bestimmten Linie von Nawk Command

Ich stieß auf "awk" und "nawk" Befehle und mein Lernen hat es noch nicht erreicht.

Kurz gesagt, ich weiß, dass awk/nawk nach einem bestimmten Muster sucht und eine Aktion durchführt, falls eine Übereinstimmung gefunden wurde.

Auch trotz dass, konnte ich nicht verstehen, was die folgende Zeile für gemeint ist:

mir
eval $(cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFULL_PARAM}") 

Bitte helfen Sie diese Zeile tut zu verstehen, was oder zu tun beabsichtigt.

+0

Heutzutage ist 'nawk' im Wesentlichen das 'einzige'' awk'; das alte "awk", für das es im Vergleich dazu "neues awk" ist, wird selten angetroffen (aber man könnte "oawk" auf einigen Systemen wie Solaris oder AIX finden; in diesem Fall ist nicht klar, ob plain 'awk' wird' nawk' oder 'oawk'). GNU Awk hat Funktionen, die nicht in 'nawk' spezifiziert sind (aber es unterstützt alle Goodies, die in' nawk' waren, aber nicht in 'oawk'). Dies hat keinen großen Einfluss auf Ihre Frage. –

+0

Der Code zeigt [UUoC - nutzlose Verwendung von 'cat'] (https://stackoverflow.com/questions/11710552/useless-use-of-cat/). –

Antwort

1
... awk '/start/,/end/' 

druckt die Datensätze zwischen Start- und Endmuster. {print} kann weggelassen werden, da es impliziert ist. Die ^ in Ihrem Skript zeigt den Anfang einer Zeile an.

Beachten Sie, dass Katze und eval nicht erforderlich sind, können die gleichen wie

$ awk '...' "${MMORPHYDIR}/${PWFILE}" 

auch können grep als auch im awk Skript enthalten sein geschrieben werden.

+1

Ich stimme zu, die Katze ist unnötig; das 'grep' ist wahrscheinlich auch unnötig, da' awk' praktisch die gleichen Regexes unterstützt. Bist du sicher, dass das 'eval' nicht ist? Es interpretiert die Ausgabe des 'cat | awk | grep' ensemble als Shell-Skript. Wenn die Ausgabe variable Einstellungen enthält, setzt das 'eval' diese Variablen; dein einfaches 'awk' nicht. –

+0

ja, du hast Recht "eval" könnte benötigt werden. War nicht sicher, was aus dem Skript kommt. – karakfa

1

awk ist Die Standard, Allzweck-Tool zum Manipulieren von Text auf allen UNIX-ähnlichen Systemen. Es gibt verschiedene Varianten von awk, alle mit der gleichen Kernfunktionalität und einigen Unterschieden. nawk ist sehr leider namens n ew awk, weil es, dass vor etwa 30 Jahren als Nachfolger von 1977s o ld awk (zB/bin/awk auf Solaris, auch bekannt als alte, kaputte awk benannt wurde das muss nie benutzt werden) und wird jetzt am besten vermieden, da es nicht einmal die minimale awk-Funktionalität unterstützt, die von POSIX benötigt wird (zB Zeichenklassen). Wichtige Lektion dort: Verwenden Sie niemals das Wort "neu" im Namen einer Software-Entität!

Die beste awk in diesen Tagen zu verwenden ist G NU awk, gawk, wie sie alle POSIX-Funktionalität und eine Tonne von nützlichen Erweiterungen unterstützt, ist in der Regel vorhanden, ist sehr gut dokumentiert und hat eine massive Nutzerbasis .

WRT:

eval $(cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFULL_PARAM}") 

Das ist ein völliges Durcheinander ist, tut buchstäblich ein Dutzend Dinge, die in der Schale oder in awk noch nie getan werden sollte. Der Versuch, es zu erklären, wäre wie der Versuch, jemanden zu erklären, der Beton mit einem Schraubenzieher mischt. Vergiss es, dass du es jemals gesehen hast und mach weiter.

Um awk zu lernen, lesen Sie das Buch Effective Awk Programming, 4. Auflage, von Arnold Robbins.