免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 758 | 回复: 1
打印 上一主题 下一主题

[文本处理] 请教一个awk自定义函数读取变量的问题 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-09-07 06:20:00程序设计版块每日发帖之星
日期:2015-09-07 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-08-25 16:35 |只看该作者 |倒序浏览
本帖最后由 zy86416779 于 2016-08-25 16:37 编辑

这个脚本的目的:给出一个文件,1. 判断是否是文件,如果是文件,则给出全路径
                                          2. 如果不是文件,则可以自己输入文件,然后再次判断,直到输入为文件,并且给出全路径

底下为脚本和文件
  1. [root@study test]# ll
  2. 总计 16
  3. -rw-r--r-- 1 root root  602 08-26 01:24 getFilename.awk
  4. -rw-r--r-- 1 root root 2216 07-24 02:26 passwd
复制代码
底下为脚本内容
  1. # getFilename function -- prompts user for filename,
  2. # verifies that file exists and returns absolute pathname.
  3. function getFilename( file) {
  4.   while (system("[ -f file ]")==0) {
  5.     printf "Enter a filename: "
  6.     getline < "-" # get response
  7.     file = $0
  8.     # check that file exists and is readable
  9.     # test returns 1 if file does not exist.
  10.     if (system("[ -f file ]")==0) {
  11.       print file " not found"
  12.       file = ""
  13.     }
  14.   }
  15.   if (file !~ /^\//) {
  16.     "pwd" | getline # get current directory
  17.     close("pwd")
  18.     file = $0 "/" file
  19.   }
  20.   return file
  21. }
  22. BEGIN{print getFilename("passwd")}
复制代码
如果我以这个脚本内容来执行,则会出现正确的结果
  1. [root@study test]# awk -f getFilename.awk
  2. /var/tmp/test/passwd
复制代码
但是,如果我把passwd改成pass,则结果就会变成
  1. [root@study test]# awk -f getFilename.awk
  2. /var/tmp/test/sswd
复制代码
从这个结果看,感觉while的那个判断语句没有执行,希望大家能够指出问题出在哪里。谢谢!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2016-09-11 14:03 |只看该作者
回复 1# zy86416779

file  != file

    file = $0
    ...
    if (system("[ -f file ]")==0) {
      print file " not found"
      file = ""
    }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP