2013-10-14 54 views
-3

我有一个数据文件包含21列。我想在10到18之间的列中减去两个相邻的值,并在最新的列之后写入结果。例如,我有以下的列的文件:减去列中的两个相邻值

1 2 3 ... 10 11 ... 18 ... 21 //column 
    0 0 0 ... 0 1 ... 0 ... 0 
    0 0 0 ... 1 2 ... 18 ... 0 
    0 0 0 ... 10 12 ... 38 ... 0 
. 
. 
. 

我想上面的数据更改为使用awk脚本如下:

1 2 3 ... 10 11 ... 18 ...21 22 23 ... 30 //column 
    0 0 0 ... 0 1 ... 0 ... 0 0 1 ... 0 // such as first row of 10:18 
    0 0 0 ... 1 2 ... 18 ...0 1 1 ... 18 
    0 0 0 ... 10 12 ... 40 ...0 9 10 ... 22 
. 
. 
. 

。 正如你所看到的,第22列是通过从第i行减去i + 1来计算的。这意味着第22列的元素从第10列计算为:

... 10 ... 22 ... //column 

... 0 ... 0 ... 
... 1 ... 1 ... 
... 10 ... 9 ... 
. 
. 
. 

任何人都可以在这方面帮助我吗?

期待您的回复,并提前致谢。

+1

'谁能帮我在这方面' - 如果你告诉我们你是怎么尝试? – devnull

+0

尝试描述你尝试过什么,为什么失败,如何... – DrakaSAN

回答

0

尝试以下操作:?

awk -f sub.awk input.txt 

其中input.txt是输入数据文件,并sub.awk

{ 
    printf "%s%s", $0, FS 

    for (i=10;i<=18;i++) { 
     printf "%s%s", $i-prevline[i], FS 
     prevline[i]=$i 
    } 
    printf "\n" 
}