Linux

如何從數據文件中減去一個常數值?

  • January 3, 2014

我想從我的數據中減去一個常數來獲得新的數據文件。例如,我想從我的數據中減去 10。

數據.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

所需輸出:

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

這是微不足道的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

為了保持列對齊,您可以通過管道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

引用自:https://unix.stackexchange.com/questions/107652