LinuxSir.cn,穿越时空的Linuxsir!

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

请教awk

[复制链接]
发表于 2009-1-7 14:28:34 | 显示全部楼层 |阅读模式
12  34  56  78
    24  65  87  90
    76  11  67  87

请在上面这些数中用awk语言找出最大数与最小数。
因为本人初学awk,只学了条件语句,赋值语句,能不能只用这些语句编出来吗?谢谢
发表于 2009-1-8 12:32:54 | 显示全部楼层
这个不用使用awk只使用bash内建的命令也可以实现的吧
回复 支持 反对

使用道具 举报

发表于 2009-1-8 13:38:21 | 显示全部楼层

  1. [python@ktt MyDocment]$ more tst
  2. 12 34 56 78
  3. 24 65 87 90
  4. 76 11 67 87
  5. [python@ktt MyDocment]$ awk '{
  6. for(i=1;i<=NF;i++) {
  7. if($i > max) {
  8.   max = $i
  9. }
  10. }
  11. printf("%d ",max)
  12. }
  13. ' tst | awk '{
  14. for(i=1;i<=NF;i++) {
  15. if($i > max) {
  16.   max = $i
  17. }
  18. }
  19. print max
  20. }
  21. '
  22. 90
  23. [python@ktt MyDocment]$
复制代码

麻烦了点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-8 14:54:44 | 显示全部楼层

谢谢

谢谢你,
麻烦就麻烦吧就这还不会呐。
回复 支持 反对

使用道具 举报

发表于 2009-1-8 16:29:49 | 显示全部楼层
Post by bangongshi_;1935688
谢谢你,
麻烦就麻烦吧就这还不会呐。


其实awk 还是挺简单的 BEGIN {} END {} {code..}
这三种结构
BEGIN 是在程序最开始的时候执行
然后执行 {code..}
最后执行 END

其它的除了函数里的局部变量要注意一下,就没什么了
回复 支持 反对

使用道具 举报

发表于 2009-1-16 00:37:27 | 显示全部楼层
  1. #!/usr/bin/awk -f
  2. BEGIN{
  3.     FS=" "
  4. }
  5. {
  6.   for(i = 0;i <= NF;i++ ){
  7.     if($i > max){
  8.       max=$i
  9.     }
  10.   }
  11.   print "the max Number is: "max
  12. }

复制代码


但我运行的结果是:
the max Number is: 78
the max Number is: 90
the max Number is: 90

不知道是什么原因,还请高人指点。谢谢!
回复 支持 反对

使用道具 举报

发表于 2009-1-18 14:20:06 | 显示全部楼层
应该吧print放在最后吧
awk '{for (i=1;i<=NF;i++) {if($i > max) max=$i}} END {print max}'
awk是一行一行的处理放在前面每处理一行就会打印一行,
回复 支持 反对

使用道具 举报

发表于 2009-1-29 14:32:58 | 显示全部楼层
#!/usr/bin/awk -f
BEGIN{
    FS=" "
}
{
  for(i = 0;i <= NF;i++ ){
    if($i > max){
      max=$i
    }
  }
#print "the max Number is: "max
}
END{print "the max Number is: "max}

^_^
回复 支持 反对

使用道具 举报

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

本版积分规则

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