- 论坛徽章:
- 0
|
本帖最后由 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. 基本结构awk的本质结构如上,是一个条件表达式,如果符合pattern就执行action。
其中缺省的pattern为空,如awk '{print $0}' a.txt; action 缺省为print $0, 如 awk '1- [~/test]$ cat a.txt
- a
- b
- c
- [~/test]$ awk '{print $0}' a.txt
- a
- b
- c
- [~/test]$ awk '1' a.txt
- a
- b
- c
复制代码 ' a.txt
BEGIN{} END{} ,他们后面跟多action分别是开始读之前,和读到最后一行- [~/test]$ cat a.txt
- a 1 2 3 A
- b 4 5 6 B
- c 7 8 9 C
- [~/test]$ awk 'BEGIN{ print "START"} {print $2 "\t" $5} END {print "END"}' a.txtSTART
- 1 A
- 4 B
- 7 C
- END
复制代码 看了上面的例子,就要提一嘴变量的问题, awk可以解析 \t
awk中$所带的不是指变量,跟shell还有perl是不同的,他们只是指向对应记录中的域 ,关于这个举个例子- [~/test]$ awk 'BEGIN{ x =5} {print x,$x} END {print "END"}' a.txt
- 5 A
- 5 B
- 5 C
- END
复制代码 |
|