【问题标题】:Using awk, subtract with previous row in all columns and print the result使用 awk,减去所有列中的前一行并打印结果
【发布时间】:2021-02-15 20:45:06
【问题描述】:

我需要你在一个使用 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}}'

【问题讨论】:

  • 如果输入文件只有1行,输出应该是什么?

标签: linux shell awk


【解决方案1】:

你可以使用这个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

【讨论】:

  • for (i=2; i&lt;=5; ++i) a[i] = $i 可以替换为split($0,a)
  • 谢谢,这样会更好
  • 是的@anubhava。有效。抱歉延迟回复。
猜你喜欢
  • 2010-10-08
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2021-12-16
  • 2019-01-14
  • 1970-01-01
相关资源
最近更新 更多