我有一个包含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 ...
.
.
.
在这方面,有人可以帮助我吗?
期待您的回复并提前致谢。
答案 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"
}