[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [shell-script] Processamento de lista de tarefas
From: |
Marcio Gil |
Subject: |
RE: [shell-script] Processamento de lista de tarefas |
Date: |
Tue, 20 Apr 2010 23:36:05 -0300 |
Legal,
acho que consegui um ponto de partida com o awk:
$ cat temp.txt
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.
$ awk '/^ *[0-9]\./{ p=match($0,"[0-9]."); i=(p-1)/2;
a[i]=substr($0,p,2); for (j=0;j<=i;j++){printf a[j]}; print
substr($0,p+2) }' temp.txt
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.
A partir daqui eu posso complementar com sed:
awk '...' | sed 's/^\([0-9.]*\)\(.*\)(risk: \([^)]*\)).*(allocated
to: \([^)]*\)) (allocated by: \([^)]*\)).*/\1\t\2\t\3\t\4\t\5/'
A não ser que exista um equivalente ao comando 's//' do sed no awk,
aí eu poderia escrever um script em awk puro.
Se alguém puder me dar uma luz ou uma sugestão para melhorar o meu
script eu agradeço.
> -----Original Message-----
> From: address@hidden
>
>
> Testado:
>
> eric@NOTEERIC:~$ cat teste.txt
> 1. Projeto (risk: 6) (allocated to: Sicrano+Beltrano)
> (allocated by: Fulano)
> 1. Primeira tarefa (risk: 6) (allocated to: Sicrano+Beltrano)
> (allocated by: Fulano)
> 1. Primeira sub-tarefa (risk: 6) (allocated to: Sicrano)
> 2. Segunda sub-tarefa (risk: 6) (allocated to: Beltrano)
> 2. Segunda tarefa (risk: 6) (allocated to: Sicrano+Beltrano)
> (allocated by: Fulano)
> 1. Terceira sub-tarefa (risk: 6) (allocated to: Sicrano)
> 2. Quarta sub-tarefa (risk: 6) (allocated to: Beltrano)
>
> eric@NOTEERIC:~$ cat teste.sh
> #!/bin/sh
>
> PROJETO="1"
>
> while read i; do
> # echo $i
> ITEM=$(echo $i | cut -d " " -f1)
> LINHA=$(echo $i | cut -d " " -f2- | sed -e
> 's/(risk:/\t/g' -e 's/(allocated [tb][oy]:/\t/g' -e 's/)//g')
> STRTAREFA=$(echo $i | cut -d "(" -f 1 | cut -d " " -f2-)
> if [ "${STRTAREFA}" = "Projeto " ]; then
> PROJETO=${ITEM}
> echo "${ITEM} ${LINHA}"
> else
> if ! echo ${STRTAREFA} | grep -q sub-tarefa ; then
> echo "${PROJETO}${ITEM} ${LINHA}"
> TAREFA=${ITEM}
> else
> echo "${PROJETO}${TAREFA}${ITEM} ${LINHA}"
> fi
> fi
> #sleep 2
> done < teste.txt
>
> eric@NOTEERIC:~$ sh teste.sh
> 1. Projeto 6 Sicrano+Beltrano Fulano
> 1.1. Primeira tarefa 6 Sicrano+Beltrano Fulano
> 1.1.1. Primeira sub-tarefa 6 Sicrano
> 1.1.2. Segunda sub-tarefa 6 Beltrano
> 1.2. Segunda tarefa 6 Sicrano+Beltrano Fulano
> 1.2.1. Terceira sub-tarefa 6 Sicrano
> 1.2.2. Quarta sub-tarefa 6 Beltrano
> eric@NOTEERIC:~$
>
>
> On Seg 19/04/10 22:09 , "Marcio Gil" address@hidden sent:
> > Pessoal, tenho o seguinte problema para resolver:
> > Estou tentando processar uma lista de tarefas gerada por uma
> > ferramenta (Todolist), e o formato é o seguinte:
> > 1. Projeto (risk: 6) (allocated to: Sicrano+Beltrano) (allocated
> > by: Fulano)
> > 1. Primeira tarefa (risk: 6) (allocated to: Sicrano+Beltrano)
> > (allocated by: Fulano)
> > 1. Primeira sub-tarefa (risk: 6) (allocated to: Sicrano)
> > 2. Segunda sub-tarefa (risk: 6) (allocated to: Beltrano)
> > 2. Segunda tarefa (risk: 6) (allocated to: Sicrano+Beltrano)
> > (allocated by: Fulano)
> > 1. Terceira sub-tarefa (risk: 6) (allocated to: Sicrano)
> > 2. Quarta sub-tarefa (risk: 6) (allocated to: Beltrano)
> > Repare que é uma árvore de tarefas. Preciso transformar isto
numa
> > tabela simples como essa:
> > 1. Projeto 6 Sicrano+Beltrano Fulano
> > 1.1. Primeira tarefa 6 Sicrano+Beltrano Fulano
> > 1.1.1. Primeira sub-tarefa 6 Sicrano
> > 1.1.2. Segunda sub-tarefa 6 Beltrano
> > 1.2. Segunda tarefa 6 Sicrano+Beltrano Fulano
> > 1.2.1. Terceira sub-tarefa 6 Sicrano
> > 1.2.2. Quarta sub-tarefa 6 Beltrano
> > Ou seja, extrair os campos da lista de tarefas e transformá-las
em
> > uma tabela com linhas e colunas separadas com tab.
> > A parte de extrair com campos e sapara-los com TAB eu sei fazer,
a
> > dúvida é o primeiro campo, que o Todolist não gera com o número
> > das
> > tarefas e sub-tarefas concatenado, porém indica o nível da
tarefa
> > por meio de endentação.
> > Alguém pode me dar uma luz de como fazer isso?
> >
> >
>