bash script - remove linhas e diminui os valores da coluna

0

Então eu tenho arquivo com 3 colunas:

9 1 2
2 2 1
5 3 1
7 3 1
5 3 1
2 3 1
8   2 1
3 2 1
1 1 1

Eu quero remover os valores particulares da primeira coluna e as linhas relativas, por exemplo, 2 e 5 (que estão presentes mais vezes na mesma coluna) e decrementar todos os valores na primeira coluna que sejam maiores que esse valor. Então, se eu remover primeiro o número 2 que eu quero obter:

8 1 2

4 3 1
6 3 1
4 3 1

7 2 1
2 2 1
1 1 1

e depois 5 (que agora é 4) minha saída seria:

7 1 2


5 3 1


6 2 1
2 2 1
1 1 1

Como posso fazer isso? Considere que eu tenho que remover muitos valores no caso real e o arquivo é realmente grande.

    
por shiva 07.05.2018 / 21:01

1 resposta

0

Solução

bash + awk :

i=0;
for n in 2 5; do
    awk -v n="$n" -v iter=$((++i)) \
   'iter == 1{ 
        if ($1 > n) { $1-- } else if ($1 == n) { next }
    }
    iter > 1{
        if ($1 + 1 == n){ next } else if ($1 >= n) $1-- 
    }1' inp_file > tmp_inpfile && mv tmp_inpfile inp_file
done

O conteúdo final de inp_file :

7 1 2
5 3 1
6 2 1
2 2 1
1 1 1
    
por 07.05.2018 / 22:06