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
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
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
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