como subtrair um valor constante de um arquivo de dados?

1

Eu quero subtrair um número constante dos meus dados para obter um novo arquivo de dados. Por exemplo, quero subtrair 10 dos meus dados.

data.txt

Id  a   b   c   d   e
1   1   2   3   4   5
2   2   3   4   5   6
3   3   4   5   6   7
4   4   5   6   7   8
5   5   6   7   8   9
6   6   7   8   9   10
7   7   8   9   10  11
8   8   9   10  11  12
9   9   10  11  12  13
10  10  11  12  13  14
11  11  12  13  14  15
12  12  13  14  15  16
13  13  14  15  16  17
14  14  15  16  17  18

Resultado exigido:

out.txt

Id  a   b   c   d   e
1   -9  -8  -7  -6  -5
2   -8  -7  -6  -5  -4
3   -7  -6  -5  -4  -3
4   -6  -5  -4  -3  -2
5   -5  -4  -3  -2  -1
6   -4  -3  -2  -1  0
7   -3  -2  -1  0   1
8   -2  -1  0   1   2
9   -1  0   1   2   3
10  0   1   2   3   4
11  1   2   3   4   5
12  2   3   4   5   6
13  3   4   5   6   7
14  4   5   6   7   8
    
por AiB 03.01.2014 / 10:27

1 resposta

3

Isso é trivial em awk :

$ awk '{if(NR>1){for(i=2;i<=NF;i++){$(i)=$(i)-10;}}print;}' data.txt 
Id  a   b   c   d   e
1 -9 -8 -7 -6 -5
2 -8 -7 -6 -5 -4
3 -7 -6 -5 -4 -3
4 -6 -5 -4 -3 -2
5 -5 -4 -3 -2 -1
6 -4 -3 -2 -1 0
7 -3 -2 -1 0 1
8 -2 -1 0 1 2
9 -1 0 1 2 3
10 0 1 2 3 4
11 1 2 3 4 5
12 2 3 4 5 6
13 3 4 5 6 7
14 4 5 6 7 8

Para preservar o alinhamento da coluna, você pode percorrer column :

$ awk '{if(NR>1){for(i=2;i<=NF;i++){$(i)=$(i)-10;}}print;}' data.txt | 
     column -t
Id  a   b   c   d   e
1   -9  -8  -7  -6  -5
2   -8  -7  -6  -5  -4
3   -7  -6  -5  -4  -3
4   -6  -5  -4  -3  -2
5   -5  -4  -3  -2  -1
6   -4  -3  -2  -1  0
7   -3  -2  -1  0   1
8   -2  -1  0   1   2
9   -1  0   1   2   3
10  0   1   2   3   4
11  1   2   3   4   5
12  2   3   4   5   6
13  3   4   5   6   7
14  4   5   6   7   8
    
por 03.01.2014 / 13:13