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

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

Re: [shell-script] Comparações de valores entre colunas de linhas difere


From: Darlon Vasata
Subject: Re: [shell-script] Comparações de valores entre colunas de linhas diferentes
Date: Thu, 21 Jul 2016 08:41:00 -0300

Muito boas as contribuições, pessoal.

Acabei implementando desta forma:

ULTIMO=$(awk 'END {print $1}' entrada.txt)
$ join -a 1 <( seq 0 $ULTIMO | sort ) <( sort entrada.txt ) | sort -n


[ ]

Darlon


On 20 de jul de 2016, at 12:08, address@hidden [shell-script] <address@hidden> wrote:

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>
> ----------------------------------------------------------



reply via email to

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