shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Comparações de valores entre colunas de linhas diferentes


From: Darlon Vasata
Subject: Comparações de valores entre colunas de linhas diferentes
Date: Wed, 20 Jul 2016 02:50:11 -0300

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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]