Chinaunix

标题: 如何用awk计算相邻两行相减 [打印本页]

作者: heizaixx    时间: 2016-02-25 17:24
标题: 如何用awk计算相邻两行相减
文本文件a.txt,内容如下:
a=582      b=376
a=583      b=172
a=584      b=233
a=585      b=434

现在需要计算第二列的后一行减去前一行的绝对值最小时所对应的第一列a的值?
第二列相减:
第2行减去第1行: |172-376|=204

第3行减去第2行: |233-172|=61

第4行减去第3行: |434-266|=168

61最小,对于的第一列a=584

请教如何用awk实现?
作者: 我是一隻羊    时间: 2016-02-25 17:48
  1. awk -F' +b=' '{a[$1]=$2-tmp>=0?$2-tmp:tmp-$2;tmp=$2}END{for(i in a)print i,a[i]|"sort -nk2|head -1"}'
复制代码

作者: heizaixx    时间: 2016-02-25 17:55
回复 2# 我是一隻羊


    谢谢我是一隻羊!问题已解决。
作者: zxy877298415    时间: 2016-02-25 22:21
  1. awk -F '=| '  'function sq (x) {return sqrt(x*x)}{a[NR]=$2;b[NR]=$NF}END{for(i=1;i<=NR-1;i++) {if(t==0||sq(b[i+1]-b[i])<t) {t=sq(b[i+1]-b[i]);m=i+1}}print "a="a[m],t}' file
复制代码
回复 1# heizaixx


   
作者: heizaixx    时间: 2016-02-26 08:26
回复 4# zxy877298415


    O(∩_∩)O非常感谢!
作者: jason680    时间: 2016-02-26 08:44
$ awk '{sub(/^[^=]+=/,"",$2);d=($2-b)>0?$2-b:b-$2;if(m>d||m==""){m=d;a=$1}b=$2}END{print a}' a.txt
a=584

作者: elu_ligao    时间: 2016-02-26 08:58
  1. awk -F= 'NR==1{min=1000;s=$3;next}{abs=$3-s>0?$3-s:s-$3;if(abs<min){min=abs;a=+$2}s=$3}END{print "a="a}'
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2