
Ich habe 10 Ordner mit aufeinanderfolgenden Namen: book_1, book_2...book_10 und jeder Ordner hat eine txt-Datei mit dem gleichen Namen wie der Ordner. Beispiel: book_1 hatnurbook_1.txt und enthält historisches Material (nur Text).
Ich muss ein AWK-Skript ausführen, dessen Ausgabe der Reihe nach zur Ausgabedatei hinzugefügt werden soll. Wie kann ich eine Schleife generieren, die meine Ordner durchläuft und aus jedem Ordner die benötigte Datei extrahiert?
awk '
{
script//
}
END { print "The output of book num $i is: " m }' book*/book*.txt >> output.txt // m is a variable which extracts max occurences of certain words which are set in the script
Meine Ausgabe sollte folgendermaßen aussehen:
The output of book num 1 is : 123
The output of book num 2 is : 2223
und so weiter
Ich danke Ihnen für Ihre Hilfe!
Antwort1
Die einfache Möglichkeit, ein beliebiges awk in einer Shell zu verwenden, die die {1..10}
Konstruktion zum Generieren eines Zahlenbereichs unterstützt (ansonsten verwenden Sie einfach $(seq 10)
), ist:
for i in {1..10}; do
awk -v i="$i" '
{
script//
}
END { printf "The output of book num %d is : %d\n", i, m }
' "book_${i}/book_${i}.txt"
done > output.txt
aber wenn Sie wirklich alles in awk machen wollten, wäre es (unter Verwendung von GNU awk für ARGIND und ENDFILE):
awk '
BEGIN {
for (i=1; i<=10; i++) {
ARGV[ARGC] = "book_" i "/book_" i ".txt"
ARGC++
}
}
{
script//
}
ENDFILE { printf "The output of book num %d is : %d\n", ARGIND, m; m=0 }
' > output.txt
Wenn eine der „Buch“-Dateien nicht existieren kann, müssen Sie einen entsprechenden Schutz dagegen hinzufügen.