首页 > 解决方案 > 具有多个列的文件中的前一个值减去后一个值后如何获得绝对值?

问题描述

我有一个包含数字的文件。

1 34 44 44 46

5 35 40 40 45

6 36 28 30 40

我的目标是让每一列在前一个值减去以下值后具有绝对值,如下所示:

1 34 44 44 46

4 1 4 4 1

1 1 12 10 5

我用了

cat File.txt | awk '{for(i=1; i<=$i-1 ;i++)$i=(a[i]-=$i)}END{print $1 >=0 ? $1 : 0 - $1}'

但我只得到了第一列减法的绝对值。我也尝试了 $0 而不是 $1 但我没有得到正确的输出。有谁知道如何改进上述命令以获得我想要的输出?

标签: linuxcommand

解决方案


测试.awk

function abs(x){
    return ((x < 0.0) ? -x : x)
}
{                               

    for(i=1; i<=$i ;i++) {a[i]=abs(p[i]-$i)}
}
{
    for(i=1; i<=$i ;i++) {p[i]=$i;}     
}
/[0-9]/{
    for (i in a) {printf "%s ",a[i]};print "";print ""
}

运行如下:

 awk -f test.awk <path_to_your_file>

推荐阅读