Chinaunix

标题: awk 处理以下文本,如何处理? [打印本页]

作者: 红狐狸    时间: 2012-09-08 14:54
标题: awk 处理以下文本,如何处理?
file:
a001 1 100
a001 2 700
a002 1 500
a002 2 100
a003 1 100


形成:
a001  2 600
a002  1 400
a003  1 100

既:按第一列, 统计第三列的差额 (第三列哪个值大,第二列, 置成值大的哪一行第二列)

作者: kk5234    时间: 2012-09-08 17:03
  1. [netslyz@noopoo ~]$ sort -k3 file|awk '{a[$1]=$1FS$2;b[$1]=$3-b[$1]}END{for(i in a)print a[i],b[i]}'
  2. a001 2 600
  3. a002 1 400
  4. a003 1 100
复制代码

作者: zooyo    时间: 2012-09-08 18:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: linuxforlive    时间: 2012-09-13 11:52
回复 3# zooyo
最近准备好好学习awk 麻烦版主给讲解一下

我按这个执行 得到的结果是这个
[root@master opt]# awk 'NR>1{if(x==$1){if($3>z){$3=$3-z}else{$3=z-$3;$2=y}}else{print x,y,z}}{x=$1;y=$2;z=$3}' file
a001 2 600
a002 1 400

[root@master opt]# cat file
a001 1 100
a001 2 700
a002 1 500
a002 2 100
a003 1 100
作者: zooyo    时间: 2012-09-13 12:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: linuxforlive    时间: 2012-09-13 13:44
回复 5# zooyo


   完整是可以的 不过能否讲解一下 <(echo)这个是啥意思啊 麻烦了
作者: zooyo    时间: 2012-09-13 14:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: linuxforlive    时间: 2012-09-13 14:07
回复 7# zooyo


    谢谢版主的耐心教导  继续学习
作者: xuqq999    时间: 2012-09-20 15:36
  1. awk '{if(!a[$1]){a[$1]=$3;b[$1]=$3;c[$1]=$2}else{if($3>a[$1]){b[$1]=$3-a[$1];c[$1]=$2}else{b[$1]=a[$1]-$3}}}END{for(i in a)print i,c[i],b[i]}' file
复制代码





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