Führen Sie auf alle Dateien in einem Verzeichnis, die Behandlung jedes einzeln, mit AWK

Möchte ich laufen ein AWK-Skript für jede Datei in einem Verzeichnis, aber der AWK-Befehl ausgeführt werden muss, die nur im Datei - das heißt, es sucht zwischen einem definierten RS und gibt, was es soll, aber ich muss es beenden, wenn er erreicht das Ende der Datei und beginnen Sie erneut am Anfang der nächsten Datei.

Habe ich diese laufen die arbeiten auf jede Datei einzeln:

awk '!/value1|value2/&& NF {print FILENAME " - " RS,$1}' RS="value" file1 > result.txt

Aber ist die Ausgabe nicht korrekt ist, zu sagen, wenn man es anwendet, um jede Datei in einem Verzeichnis mit

find . -type f | awk ... file1 > result.txt

Wie würde ich es bekommen, jede Datei einzeln, sondern fügen Sie die Ergebnisse in die gleiche Datei? Ich habe keine Ahnung, leider. Ich denke, es ist, indem Sie jede Datei in eine variable und AWK anschauen, aber ich bin nicht sicher, wie es zu tun.

Datei Datei1:

interface Vlan3990
 ip address 172.17.226.23 255.255.255.254

Datei file2:

version 12.2
ip tacacs source-interface Loopback99
ip vrf test
 description xx
interface Loopback99
 description Management Loopback
interface Loopback100
 shutdown

- Ausgang

find . -type f | xargs awk '!/description|shutdown/&& NF {print FILENAME " - " RS,$1}' RS="interface" | more
./file1 - interface Vlan3990
./file2 - interface version

Ich bin nicht sicher, wo der output "- Schnittstelle in der version' ist aus...

  • shell-Skript aufrufen awk in jeder Datei einzeln? oder BEGINNEN/BEGINFILE/ENDE/ENDFILE umgesetzt als nötig?
  • ja - so sieht es bei einer Datei, die ausgeführt wird der Befehl beendet, dann öffnet die nächste Datei im Verzeichnis, führt den Befehl aus, Stoppt etc... nicht sicher, wie es zu tun, da gibt es 300+ Dateien in das Verzeichnis
  • Können Sie erläutern, wie der Satz aber die Ausgabe ist nicht korrekt? Was sind die Unterschiede zwischen dem, was Sie bekommen und was Sie erwarten?
  • in jeder Datei gibt es eine Letzte vorkommen der RS, so sieht es aus und gibt zwischen dem letzten auftreten in der ersten Datei und die erste vorkommen der zweiten Datei...
  • Klären Sie, was Sie versuchen zu tun, probieren Sie die Eingabe und erwartete Ausgabe, wie Sie zu sein scheinen zu Fragen, für ein workaround für ein problem, das nicht existiert.
  • ok. Dank ed. eine Sek.
  • Ist "output" über die Ausgabe, die Sie wollen oder die Ausgabe, die Sie aktuell bekommen, dass Sie nicht wollen? Wenn die letztere, welche Ausgabe wollen Sie?
  • Die Ausgabe "interface version", durch die Art und Weise, kommt von dir Einstellung RS="version" und drucken Sie dann RS, gefolgt von $1, wenn $1 ist "version" auf die erste Zeile von Datei2 erhalten Sie durch die Ausgabe.
  • ok... ich würde erwarten, um zu sehen, eine Ausgabe aller Zeilen, beginnend mit "Schnittstelle", die nicht über die Zeilen, beginnend mit entweder 'shutdown' oder 'Beschreibung' nach, bis die nächste Instanz eine Zeile beginnend mit 'interface'. im wesentlichen ist es cisco-config - und ich möchte es drucken alle Schnittstellen, die nicht heruntergefahren und nicht eine Beschreibung haben.

Schreibe einen Kommentar