多列文件中前一个值减去后一个值如何得到绝对值?
How to get absolute value after subtracting the following value by the previous value in a file with multiple colomns?
我有一个包含数字的文件。
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 >=0 ? : 0 - }'
但我只得到了第一列减法的绝对值。
我也尝试了 $0 而不是 $1 但我没有得到正确的输出。
有谁知道如何改进上述命令以获得我想要的输出?
test.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>
我有一个包含数字的文件。
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 >=0 ? : 0 - }'
但我只得到了第一列减法的绝对值。 我也尝试了 $0 而不是 $1 但我没有得到正确的输出。 有谁知道如何改进上述命令以获得我想要的输出?
test.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>