#! /usr/bin/awk -f

BEGIN { # Initialisierung ------------------------------------------------------
 notes=0;
 num=0;
}

{ # Bei allen Zeilen: Fussnotenmarker ersetzen ---------------------------------
 for (start=1;
      match(substr($0, start), /\[[0-9]+\]/, a);
      start+=RSTART+length("[" numbers[a[0]] "]")-1) {
   if (!(a[0] in numbers)) numbers[a[0]]=++num;
   $0 = substr($0, 0, start+RSTART-2) "[" numbers[a[0]] "]" \
        substr($0, start+RSTART+RLENGTH-1);
 }
}

notes==0 || ! /^\[[0-9]+\]/ { # Nicht-Fussnotendefinitionen ausgeben -----------
 print $0
}

/^@footnotes:$/ { # Markierung erreicht, es folgen Fussnotendefinitionen -------
 notes=1;
}

notes==1 && /^\[[0-9]+\]/ { # Fussnotendefinition extrahieren ------------------
 match($0, /^\[([0-9]+)\].*$/, a);
 defs[a[1]]=$0;
}

END { # Fussnotendefinitionen sortiert ausgeben --------------------------------
 for (i=1; i<=num; ++i) print defs[i];
}