LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1027|回复: 8

[请教]求一个文件的两行之差

[复制链接]
发表于 2006-11-23 23:00:50 | 显示全部楼层 |阅读模式
比如文件

2.36
36.89
22.34
2.2
1.21
3.66


第一行 -  第二行
第三行 -  第四行



为什么我这个不能求差?

awk '{a = $2; next; b = $2; printf("%f\n", b-a);}' tmp.txt
发表于 2006-11-24 13:36:29 | 显示全部楼层
你感觉$2有值吗??
$2就没有值,你怎么能得到哪???那a就没有值,理所当然了。b也就不会有值了!!!!
以我的知识水平来说awk中$2指的是第二列,
回复 支持 反对

使用道具 举报

发表于 2006-11-24 13:50:23 | 显示全部楼层
我写的这个不好;
awk '{{if(NR%2==0)a=$0;else b=$0}print b-a}' temp|awk '{if(NR%2==0)print $0}        
'
你试试??
回复 支持 反对

使用道具 举报

发表于 2006-11-26 20:56:33 | 显示全部楼层
如果不介意用Perl的话
以下的代码是估计是最简单的
  1. [0 No.1858 huan@huan ~]$ cat txt
  2. 2.36
  3. 36.89
  4. 22.34
  5. 2.2
  6. 1.21
  7. 3.66
  8. [0 No.1859 huan@huan ~]$  perl -lpe ' $_ = <> - $_ '  txt
  9. 34.53
  10. -20.14
  11. 2.45
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-11-27 10:45:29 | 显示全部楼层
  1. #cat a
  2. 2.36
  3. 36.89
  4. 22.34
  5. 2.2
  6. 1.21
  7. 3.66


  8. #cat b
  9. tmp=(`cat a`)
  10. for (( i = 0; i < ${#tmp[*]}; i++))
  11. do  awk BEGIN'{num1='${tmp[i]}';num2='${tmp[i+1]}';printf "%.2f\n",num1-num2}'
  12.     let i++
  13. done

  14. #./b
  15. -34.53
  16. 20.14
  17. -2.45
复制代码


我awk不会用……写不出2楼那么先进的……只有这个笨法。
回复 支持 反对

使用道具 举报

发表于 2006-11-27 13:25:51 | 显示全部楼层
如果非要awk
  1. huanlf@huanlf-desktop:~$ cat txt
  2. 2.36
  3. 36.89
  4. 22.34
  5. 2.2
  6. 1.21
  7. 3.66
  8. huanlf@huanlf-desktop:~$ awk '{ if( NR % 2 == 0) { print $0 - a } ; a = $0 }' txt
  9. 34.53
  10. -20.14
  11. 2.45
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-11-27 13:43:22 | 显示全部楼层
  
awk '{ if( NR % 2 == 0) { print [color="Red"]a - $0 } ; a = $0 }' txt
回复 支持 反对

使用道具 举报

发表于 2006-11-27 14:30:25 | 显示全部楼层
Post by davi
  
awk '{ if( NR % 2 == 0) { print [color="Red"]a - $0 } ; a = $0 }' txt

这个方法聪明。我怎么没有想到哪?
回复 支持 反对

使用道具 举报

发表于 2006-11-27 14:30:30 | 显示全部楼层
:mad::mad::mad::mad::mad::mad::mad::mad::mad::mad:
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表