Olá Darlon, uma solução em bash
Abraços Paulo Bettega
i=0;while read linha;do
f1=$(cut -d' ' -f1 <<<"$linha")
for ((;i<f1;i++)){ echo $i;}
echo "$linha";let i++
done <<<'0 abc
2 def
5 ghi
6 jkl
10 mno'
0 abc
1
2 def
3
4
5 ghi
6 jkl
7
8
9
10 mno
On 20-07-2016 02:50, Darlon Vasata address@hidden [shell-script] wrote:
>
>
> 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>
> ----------------------------------------------------------