Olá pessoal.
Tenho aqui a seguinte situação, e acredito que ela possa ser implementada
usando shell/awk.
A entrada é um arquivo com duas colunas: a primeira contém um inteiro (ordenado
e não-repetido) e a segunda
coluna possui um valor qualquer, que deve ser repetido na saída.
Exemplo:
Entrada:
$ cat entrada.txt
0 abc
2 def
5 ghi
6 jkl
10 mno
Saída desejada:
0 abc
1
2 def
3
4
5 ghi
6 jkl
7
8
9
10 mno
Ou seja, a saída na primeira coluna é uma lista de inteiros em sequencia.
Implementei da seguinte forma:
#obtém o último número da primeira coluna na entrada
$ ULTIMO=$(tail -n 1 entrada.txt | awk '{print $1}')
#Produz a saída
$ paste <(seq 0 $ULTIMO ) entrada.txt | awk 'BEGIN{X=0} {while(X<$2){print X;
X++};{ print $2,$3; X++} }' |
uniq > saida.txt
Esta implementação está ok. vejam a saída:
$ cat saida.txt
0 abc
1
2 def
3
4
5 ghi
6 jkl
7
8
9
10 mno
Gostaria de realizar a comparação de valores em diferentes linhas de uma outra
forma, principalmente para
eliminar o while do awk...
Me refiro a comparação em diferentes linhas porque o código que utilizei tem o
seguinte trecho:
$ paste <(seq 0 $ULTIMO ) entrada.txt
0 0 abc
1 2 def
2 5 ghi
3 6 jkl
4 10 mno
5
6
7
8
9
10
e "movimentar" os valores da segunda coluna é a parte que gostaria de saber se
há uma forma melhor de implementar.
Alguma sugestão de implementação sem utilizar o while do awk?
[ ]
Darlon
--------------------------------------------------------------------------------------------------------------
Enviado por: Darlon Vasata <address@hidden>
--------------------------------------------------------------------------------------------------------------