Dieses Skript sollte es unter einigen Voraussetzungen trotzdem tun. Beispielsweise wird es beschädigt, wenn Attribute im div
Tag eine schließende Klammer ( >
) enthalten, wenn sich die Reihenfolge der Attribute title
und creator
ändert, oder wenn das div
Tag mehrere Zeilen umfasst.
#!/usr/bin/awk -f # treat the opening tag line here /<div title=".*" creator=".*"/ { indiv = 1 # inside div from here on name = gensub(/.* title="([^"]+)".*/, "\\1", "") # extract name tagsattr = gensub(/.* tags="([^"]+)".*/, "\\1", "") # extract tags string split(tagsattr, tags, /, /) # split tags into array print(name) > name # print name into file "name" for(tag in tags) printf("@%s ", tags[tag]) >> name # print tags with "@" prefix printf("\n\n") >> name # two newlines sub(/.*<div [^>]+>/, "") # remove the tag so the rest # of the line can be printed } # treat closing line indiv == 1 && /<\/div>/ { sub(/<\/div>.*/, "") # remove tag so the rest print >> name # can be printed indiv = 0 # outside div from here on } # print all other lines inside of div indiv == 1 { print >> name }
chmod +x
es und Aufruf mit Namen der Eingabedatei als Argument. In diesem Fall wird die Ausgabedatei im aktuellen Verzeichnis erstellt. Seien Sie also vorsichtig.
Wenn Ihre Eingabedateien in einer Verzeichnisstruktur strukturiert sind, müssen Sie möglicherweise die richtige Befehlszeile mit Shell-Platzhaltern, Schleifen oder dem find
Dienstprogramm finden.