#! /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];
}