Как получить абсолютное значение после вычитания следующего значения из предыдущего значения в файле с несколькими колоннами? - PullRequest
0 голосов
/ 23 января 2020

У меня есть файл, содержащий цифры.

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, но я не получил правильный вывод. У кого-нибудь есть идеи, как улучшить вышеуказанную команду, чтобы получить желаемый результат?

1 Ответ

1 голос
/ 23 января 2020

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...