Fala Márcio, na solução que eu propus, a única coisa que mudaria seria o case. Mas estecase tb poderia ser substituído por um for, se os subíndices estivessem em vetores e vc fosse montando dinamicamente os índices dentro do loop do for.
Acho que é uma solução que deveria ser tentada exclusivamente como exercício de lógica, já que a "matada" que vc deu em awk é *muito melhor*. Preciso exercitar mais o meu awk, pois é uma ferramenta excelente. Há pouco tempo escrevi cerca de 50 páginas A4 sobre esta linguagem, mas por falta de tempo parei por aí. Passei o material para um amigo dar pitacos e escrever mais sobre o tema, mas aparentemente ele tem o mesmo problema que eu, pois nem o recebimento do material ele acusou. Tenho de arrumar tempo para continuar esta tarefa e, quem sabe, não sai uma nova publicação. Abraços, Cursos de* **Shell* e *Zenity* em 2 fins de semana? - Aracaju turma de *Shell* em 12/05 - [email protected]; - DF turma de *Shell* em 12/06 - ligue* (61)3223-3000*; - RJ turma de *Shell* em 14/06 - ligue (21)2210-6061; - Floripa turma de *Shell* e *Zenity* 12/07 [email protected]; - Turmas fechadas em outras cidades ligue (21)8112-9988. Em 21 de abril de 2010 09:07, Marcio Gil <[email protected]> escreveu: > > > Júlio, é isso mesmo. Recalcular os índices das tarefas? Idéia > interessante, teoricamente tem que bater com a lista gerada. > > O único problema é que na prática a árvore de tarefas chega a dez > níveis, o script vai ficar um pouco grande... > > A script em awk que eu havia feito não considerava mais de 9 > tarefas em um nível, então eu refiz e coloquei em um arquivo: > > #!awk -f > /^ *[0-9]*\./{ > n=match($0,"[0-9]+.") > p=index($0,".") > i=(n-1)/2 > a[i]=substr($0,n,p+1-n) > > for (j=0;j<=i;j++){ > printf a[j] > } > print substr($0,p+1) > > } > > > -----Original Message----- > > From: Julio C. Neves > > > > Marcio, > > vê se é isso. Vou montar a lista dentro de uma variável, > > indentando: > > Lista="1. Desenho > > 1. Sistema de coordenadas > > 1. Criar o método X() > > 2. Criar o método Y() > > 2. Primitivas gráficas > > 1. Desenho de linhas > > 2. Desenho de quadrados > > 2. Etc" > > > > Mudando o IFS: > > IFS=' > > ' > > > > O programa propriamente dito: > > while read linha > > do > > sp=$(grep -oE '^ +' <<< "$linha") > > case "${#sp}" in > > 0) ind=$[++ind1]. > > ind2= > > ind3= > > ;; > > 2) ind=$ind1.$[++ind2]. > > ind3= > > ;; > > 4) ind=$ind1.$ind2.$[++ind3]. > > esac > > echo $ind$(cut -f2- -d. <<<"$linha") > > done <<< $Lista > > > > Abraços, > > Julio > > Cursos de Shell e Zenity em 2 fins de semana? > > - Aracaju turma de Shell em 12/05 - > > [email protected]<andersonrizada%40gmail.com> > ; > > - RJ turma de Shell em 14/06 - ligue (21)2210-6061; > > - Turmas fechadas em outras cidades ligue (21) 8112-9988. > > > > > > Em 20 de abril de 2010 22:14, Marcio Gil > > <[email protected] <marciomgil%40bol.com.br>> escreveu: > > > > > > > > > > > Na verdade o que determina o nível é a endentação, ou seja, > > > os espaços no início da linha. Os termos "Projeto", "Tarefa" > > > e "sub-tarefa" são só para exemplificar, poderiam ser > > > qualquer outra coisa. > > > > > > Desculpe se não consegui ser mais claro. Vou dar outro > > > exemplo com os espaços indicados por <SP> (acredito que o meu > > > e-mail tenha chegado sem eles :-) > > > > > > 1. Desenho > > > <SP><SP>1. Sistema de coordenadas > > > <SP><SP><SP><SP>1. Criar o método X() > > > <SP><SP><SP><SP>2. Criar o método Y() > > > <SP><SP>2. Primitivas gráficas > > > <SP><SP><SP><SP>1. Desenho de linhas > > > <SP><SP><SP><SP>2. Desenho de quadrados > > > 2. Etc. > > > > > > Deveria ficar: > > > > > > 1. Desenho > > > 1.1. Sistema de coordenadas > > > 1.1.1. Criar o método X() > > > 1.1.2. Criar o método Y() > > > 1.2. Primitivas gráficas > > > 1.2.1. Desenho de linhas > > > 1.2.2. Desenho de quadrados > > > 2. Etc. > > > > > > No caso talvez eu pudesse utilizar as expressões regulares: > > > > > > '^[0-9]' para o nível 0 > > > '^ [0-9]' para o nível 1 > > > '^ [0-9]' para o nível 2 > > > '^ [0-9]' para o nível 3 > > > '^ [0-9]' para o nível 4 > > > > > > e assim por diante. Provavelmente eu tenha mesmo que criar um > > > laço "for" com vários "if"s, porém vou ver se consigo alguma > > > coisa menor com o awk. > > > > > > Abraços, > > > > > > Marcio Gil. > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ --------------------------------------------------------------------- Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso. --------------------------------------------------------------------- Sair da lista: [email protected] --------------------------------------------------------------------- Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net --------------------------------------------------------------------- Servidor Newsgroup da lista: news.gmane.org Grupo: gmane.org.user-groups.programming.shell.brazil Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/shell-script/ <*> Para sair deste grupo, envie um e-mail para: [email protected] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
