首页 > 解决方案 > 使用 awk,减去所有列中的前一行并打印结果

问题描述

我需要你在一个使用 awk 的 linux 线性命令中的指导,在所有列中递归地减去前一行的行,然后打印差值。

我输入为

2021-02-15_16 101242 102108 17572 84538
2021-02-15_17 101235 102077 17625 84445

预期产出

 2021-02-15_17  -7  -31 53  -93

我自己尝试过,但没有运气。

    cat test |awk 'NR==1{s=$3;next}{s-=$3}END{print s}' --> this displays only for 1 column

cat test | awk  'NR==1 {for(i=3; i<=NF; i++){s=$i;next}{s-=$i}{print s}}'

标签: linuxshellawk

解决方案


你可以使用这个awk

awk 'NR > 1 {for (i=2; i<=5; ++i) $i -= a[i]; print} {split($0,a)}' file

2021-02-15_17 -7 -31 53 -93

为了使其更具可读性:

awk 'NR > 1 {
   for (i=2; i<=5; ++i)
      $i -= a[i]
   print
}
{
   split($0,a)
}' file

推荐阅读