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

.

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

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

4

1 回答 1

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"
}
于 2013-10-14T09:42:13.337 回答