Este script deve fazê-lo, sob algumas suposições de qualquer maneira. Por exemplo, ele quebrará se os atributos na tag div
contiverem um colchete angular de fechamento ( >
), se a ordem dos atributos title
e creator
for alterada ou se a tag div
ocupar várias linhas .
#!/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
e chama com o nome do arquivo de entrada como argumento. Assim, ele criará seu arquivo de saída no diretório atual, portanto, tenha cuidado.
Se os seus arquivos de entrada estiverem estruturados em uma árvore de diretórios, talvez seja necessário encontrar a linha de comando correta com curingas, loops ou o utilitário find
.