免费注册 查看新帖 |

Chinaunix

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

脚本分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-01 11:13 |只看该作者 |正序浏览
我想统计下面文本中单词的个数,例如:F_OK, O_APPEND,...请高手帮忙解答一下

'F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM',
'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT',
'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAI
T', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'UserDict', 'W_OK', '
X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__',
'__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list'
, '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_s
tatvfs_result', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange',
'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error'
, 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe'
, 'extsep', 'fdopen', 'fstat', 'fsync', 'getcwd', 'getcwdu', 'getenv', 'getpid',
'isatty', 'linesep', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name',
'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3', 'popen
4', 'putenv', 'read', 'remove', 'removedirs', 'rename', 'renames', 'rmdir', 'sep
', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_float_ti
mes', 'stat_result', 'statvfs_result', 'strerror', 'sys', 'system', 'tempnam', '
times', 'tmpfile', 'tmpnam', 'umask', 'unlink', 'unsetenv', 'urandom', 'utime',
'waitpid', 'walk', 'write'

论坛徽章:
0
24 [报告]
发表于 2011-06-01 18:13 |只看该作者
本帖最后由 ywlscpl 于 2011-06-01 18:14 编辑
回复  ywlscpl


    苍狗兄,是前面的NF+=0,我刚才也被误导了
yinyuemi 发表于 2011-06-01 14:31



明白了,NF+=0导致$0重排,默认OFS生效,故字段之间多了默认的OFS

设置新的OFS可以解决多了个空格的问题
  1. ywlscpl@ubuntu:~$ cat file
  2. 'F_
  3. OK', 'O_APPEND'
  4. ywlscpl@ubuntu:~$ awk -vRS="'|," -v OFS= 'NF+=0{a[$0]}END{for(i in a) print i}'  file
  5. F_OK
  6. O_APPEND
复制代码

论坛徽章:
0
23 [报告]
发表于 2011-06-01 17:15 |只看该作者
awk -v RS=, -F "'" '$2 {++a[$2];b[NR]=$2}END{for (i in a) print i,a[i]}'

论坛徽章:
0
22 [报告]
发表于 2011-06-01 16:47 |只看该作者
这道题目源于我在用python的时候,想看一下os下的库函数,因为也正在学awk,所以就想用awk统计一下函数的个数,现在问题已经完美解决了,感谢各位的热情回复。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
21 [报告]
发表于 2011-06-01 14:31 |只看该作者
回复 19# ywlscpl


    苍狗兄,是前面的NF+=0,我刚才也被误导了

论坛徽章:
0
20 [报告]
发表于 2011-06-01 14:21 |只看该作者
回复 1# huaqi2008
  1.    [root@~]# awk -F"['|,| ]" '{for(i=1;i<=NF;i++) phrase[$i]++} END {for(j in phrase) print j":"phrase[j]}' file
复制代码
我统计的每个单词好像就一个阿

论坛徽章:
0
19 [报告]
发表于 2011-06-01 14:18 |只看该作者
发现awk数组如果下标中有\n,会被转成空格,有趣的现象
  1. [root@Mylinux tmp]# cat file
  2. 'F_
  3. OK', 'O_APPEND'
  4. [root@Mylinux tmp]# awk -vRS="'|," 'NF+=0{a[$0]}END{for(i in a) print i}'  file

  5. O_APPEND
  6. F_ OK
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
18 [报告]
发表于 2011-06-01 13:40 |只看该作者
回复 16# ywlscpl


    恩,的确是,改下:
  1. awk -vRS="'|," 'NF+=0{a[$0]}END{for(i in a) ++sum;print sum}'  file
复制代码

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
17 [报告]
发表于 2011-06-01 13:25 |只看该作者
不会重复吧.在python里直接
len(dir(os)) 就行吧

论坛徽章:
0
16 [报告]
发表于 2011-06-01 13:24 |只看该作者
本帖最后由 ywlscpl 于 2011-06-01 13:25 编辑

10楼的未考虑单词分行的情况
  1. ywlscpl@ubuntu:~$ cat file
  2. 'F_
  3. OK', 'O_APPEND'
  4. ywlscpl@ubuntu:~$ awk -vRS="'|," 'NF+=0{a[$1]}END{for(i in a) print i;}'  file   
  5. F_
  6. O_APPEND
复制代码
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP