减去列中的两个相邻值

时间:2013-10-14 06:52:53

标签: bash awk

我有一个包含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
.
.
.

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

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

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

在这方面,有人可以帮助我吗?

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

1 个答案:

答案 0 :(得分: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"
}