|
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 |
[Prev in Thread] | Current Thread | [Next in Thread] |