免费注册 查看新帖 |

Chinaunix

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

[学习共享] 分享自己记录的资料。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-05 00:12 |只看该作者 |倒序浏览
本帖最后由 力哥丶 于 2012-12-05 00:19 编辑
  1. 变量与用法
  2. 变量                         概述
  3. $0        记录当前文本(即整个域,单个变量)
  4. $1        记录域中的第一例(字段有FS分隔, $1~$n)
  5. FS        输入字段分隔符默认是空格
  6. OFS        输出字段分隔符默认为空格
  7. NF        当前记录中的字段个数,以列计算
  8. NR        已经读出的记录数,就是行号,从1开始
  9. FNR        当前记录数
  10. RS        输入的记录他隔符,默认为换行\n
  11. ORS        输出的记录分隔符默认为换行\n
  12. ARGC        命令行参数个数
  13. ARGV        命令行参数数组
  14. ARGIND        当前被处理文件ARGV的标示符
  15. FILENAME        当面输入文件的名字
  16. IGNORECASE        如果为真,则忽略大小写
  17. CONVFMT        数字转换格式
  18. ENVIRON        UNIX环境变量
  19. ERRNO        UNIX系统错误消息
  20. FIELDWIDTHS        输入字段宽度空白分割字符串
  21. OFMT        数字的输入格式
  22. RSTATE        被匹配函数的首字符串
  23. RLENGTH        被匹配函数的字符串长度
  24. SUBSEP        \034





  25. (1)整个域$0
  26. [root@localhost ~]#  awk '/^root/{print $0}' /etc/passwd
  27. root:x:0:0:root:/root:/bin/bash
  28. 以passwd文件为例匹配root,并追加root行,如果直接使用$0,将输出整个passwd文件用户。
  29. (2)字段分隔符FS
  30. [root@localhost ~]# awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd
  31. root /bin/bash
  32. FS默认是空格,passwd文件里是以:为分隔的。匹配root行并且输出本行的最后一个域NF字段总数,$NF是最后一个字段。
  33. (3)OFS的使用
  34. [root@localhost ~]# awk 'BEGIN{FS=":";OFS="^^"}/^root/{print NR,$1,$NF}' /etc/passwd
  35. 1^^root^^/bin/bash
  36. OFS是输出字段分隔符,必须要对字段采取操作才会生效,如果将后面的$1修改为$0。OFS将不会生效。
  37. (4)NR,FNR记录条数
  38. [root@localhost ~]# awk 'BEGIN{FS=":"}/^root/{print NR,$1,$NF,FNR}' /etc/passwd
  39. 1 root /bin/bash
  40. 记录文件的行数,显示$1,和最后一个字段域,FNR在这里没生效,是因为当文件数量超过1的时候FNR才会生效,例如俩个文件中有5行,那么 NR=10, FNR=5,5
  41. (5)RS,ORS的使用
  42. [root@localhost ~]$ awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' /etc/passwd      
  43. 1 root /bin/bash^^2 bin /sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin
  44. ORS是输出字段分隔符。默认是换行,以上将ORS修改为^^,\n换行也就没了。
  45. (6)获取输入参数ARGC、ARGV
  46. [root@localhost ~]# awk 'BEGIN{FS=":";print "ARGC="ARGC;for(K in ARGV){print K"="ARGV[K]}}' /etc/passwd
  47. ARGC=2
  48. 0=awk
  49. 1=/etc/passwd
  50. ARGC 除了 –v –f 以外的都为参数,ARGV是数组,ARGC=2,用K去循环ARGV,并且把训话的值打印出来。
  51. (7)获取传入的文件名(FILEMANE)
  52. [root@localhost ~]# awk 'BEGIN{FS=":"}/^root/{print FILENAME}' /etc/passwd
  53. /etc/passwd
  54. 获取处理数据的文件名。BEGIN里不能获取任何变量。
  55. (8)获取linux环境变量(ENVIRON)
  56. [root@localhost ~]# awk 'BEGIN{print ENVIRON["PATH"];}' /etc/passwd
  57. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  58. (9)输出数据格式设置(OFMT)
  59. [root@localhost ~]# awk 'BEGIN{OFMT="%.3f";print 2/3,123.111111;}'
  60. 0.667 123.111
  61. OFMT,默认是保留小数点后6位,这里保留三位,并四舍五入。 2/3 2除以3。
  62. (10)按宽度指定分隔符(FIELDWIDTHS)
  63. [root@localhost ~]# echo 20121125152222 | awk 'BEGIN{FIELDWIDTHS="4 2 2 2 2 2"}{print $1"-"$2"-"$3,$4":"$5":"$6 }'
  64. 2012-11-25 15:22:22
  65. 这里必须要对每个域分隔符进行打印否则不生效。
  66. (11)被匹配这个测表达式首位 RSTART,匹配字符长度RLENGIH
  67. [root@localhost ~]# awk 'BEGIN{start=match("this is a test",/[a-z]+$/);print start,RSTART,RLENGTH}'
  68. 11 11 4、
  69. 这里用到match函数意思是match(s,r)测试r是否匹配s的字符串,RSTART显示字符串的长度,不包含空格,RLENGIH输出末尾字符的长度,默认是以空格分隔没有则显示-1
复制代码
以上是我自己记录的资料。然后分享下,还有一些例子,有些是参照别人的,有的是我自己写的,有人喜欢搞一些专业名词来让新手晕,那么我给你解释。


论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
2 [报告]
发表于 2012-12-06 11:00 |只看该作者
不错,不错,整理的很清晰和简洁,收藏学习了!

论坛徽章:
0
3 [报告]
发表于 2012-12-06 12:39 |只看该作者
回复 2# 刺客阿地


    虽然只有一个人回帖,

   OK,我也感到很光荣

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2012-12-06 13:30 |只看该作者
感谢分享

论坛徽章:
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
5 [报告]
发表于 2012-12-06 13:31 |只看该作者
回复 3# 力哥丶

yinyuemi的 awk数组的学习心得:
http://bbs.chinaunix.net/thread-2312439-1-1.html

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP