#!/usr/bin/awk -f # Initialisierung # # "lbrk" und "rbrk" werden als temporäre Ersatzstrings für die # eckigen Klammern benutzt, wenn die originalen Fussnoten ersetzt # werden, um doppelte Ersetzungen zu verhindern. Am Schluss werden # diese Strings wieder durch die eckigen Klammern ersetzt. BEGIN { maintext=1; count=1; lbrk="a192aedadac29bdc8ec296f267222d17" rbrk="8ea03e15e3312e78ce9278b05acd1af0" } /a192aedadac29bdc8ec296f267222d17/ { print "lbrk ist im Text enthalten, bitte Skript anpassen..."; exit; } /8ea03e15e3312e78ce9278b05acd1af0/ { print "rbrk ist im Text enthalten, bitte Skript anpassen..."; exit; } # Start des Fussnotenbereichs /^@footnotes:/ { maintext = 0; } # Verarbeitung des Haupttextes maintext == 1 { # Zeilen an "[" aufsplitten (potentielle Fussnotenfundstellen) num = split($0, array, "["); for (idx=1; idx<=num; idx++) { # Nur wenn auch "]" auftaucht, könnte es eine Fussnote sein if (match(array[idx], "]")) { # Nur wenn nur Zahlen zwischen "[" und "]" stehen, ist es eine footnote = substr(array[idx], 1, RSTART-1); if (footnote == sprintf("%d", footnote) ) { # Falls diese Referenz noch nie aufgetaucht ist, wird # eine neue Zuordnung alt -> neu in a_footnote gespeichert if (a_footnote[footnote] == 0) { a_footnote[footnote] = count; count++; } # Ersetzen der alten durch die neue Referenz gsub("\\[" footnote "\\]", lbrk a_footnote[footnote] rbrk); } } } # Ersetzen der temporären Ersatzstrings für die eckigen Klammern gsub(lbrk, "["); gsub(rbrk, "]"); print $0; } # Verarbeitung des Fussnotenbereichs /^\[[0-9]+\]/ && (maintext == 0) { # Extrahieren der alten Fussnote footnote = substr($1, 2, length($1)-2); # Extrahieren des zugehörigen Fussnotentextes footnotetext = substr($0, length($1)+2); # Speichern des Fussnotentextes in einem Array mit der neuen Numerierung a_footnotetext[a_footnote[footnote]] = footnotetext; } # Ausgabe der sortierten Fussnoten END { print "@footnotes:\n"; for (idx=1; idx