免费注册 查看新帖 |

Chinaunix

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

[学习共享] AWK 学习翻译帖 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-21 16:15 |只看该作者 |倒序浏览
本帖最后由 KoomIer 于 2015-09-21 16:18 编辑

看到大神们都是awk党,我都是捡漏学习了
这次打算把这一篇通读了,任性翻译了,所以不用介意啊
测试环境: cygwin:CYGWIN_NT-6.1-WOW awk:GNU Awk 4.1.1
原文自: www。grymoire。com/Unix/Awk。html ##CU不能插入链接还真是麻烦

1. Why awk
awk兄弟很多, awk, nawk, gawk, 用的时候注意点兼容性,sun里面很可能用nawk
现在还有JAWK, TAWK, MAWK, 我们不用关心那么多吧
名字那么丑呢,是因为作者长得丑,A. Aho, B. W. Kernighan and P. Weinberger.

至于好用嘛:
1. nuix系列的输出多数是行列形式, awk非常善于这个
2. awk类C的语法,
3. awk优秀的字符串功能
4. 关联数组  ## 这个就是类似!a[$0]++, $0不一定为数字了,看着是不是像python的字典啊,哈哈

作者还说了,其实啊, 文本处理还是要看perl, awk可以用a2p来转换为perl

2. 基本结构
  1. pattern {action}
复制代码
awk的本质结构如上,是一个条件表达式,如果符合pattern就执行action。
其中缺省的pattern为空,如awk '{print $0}' a.txt; action 缺省为print $0, 如 awk '1
  1. [~/test]$ cat a.txt
  2. a
  3. b
  4. c
  5. [~/test]$ awk '{print $0}' a.txt
  6. a
  7. b
  8. c
  9. [~/test]$ awk '1' a.txt
  10. a
  11. b
  12. c
复制代码
' a.txt

     BEGIN{} END{} ,他们后面跟多action分别是开始读之前,和读到最后一行
  1. [~/test]$ cat a.txt
  2. a 1 2 3 A
  3. b 4 5 6 B
  4. c 7 8 9 C
  5. [~/test]$ awk 'BEGIN{ print "START"} {print $2 "\t" $5} END {print "END"}' a.txtSTART
  6. 1       A
  7. 4       B
  8. 7       C
  9. END
复制代码
看了上面的例子,就要提一嘴变量的问题, awk可以解析 \t
awk中$所带的不是指变量,跟shell还有perl是不同的,他们只是指向对应记录中的域 ,关于这个举个例子
  1. [~/test]$ awk 'BEGIN{ x =5} {print x,$x} END {print "END"}' a.txt
  2. 5 A
  3. 5 B
  4. 5 C
  5. END
复制代码

论坛徽章:
0
2 [报告]
发表于 2015-09-21 17:50 |只看该作者
The GNU Awk User’s Guide   www。gnu.org/software/gawk/manual/gawk.html

绝对官方,经典~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP