Awk 之我见
来源:互联网 发布:淘宝买机油 编辑:程序博客网 时间:2024/06/05 16:22
****************************************
author: hjjdebug
date: Thu Jun 12 12:42:50 CST 2014
****************************************
1.三剑客
****************************************
曾闻grep,sed,awk是linux 文本处理了不起的三剑客。
认识了awk, 发现awk功能上可以替代grep,sed. 当然,相同的功能需要多写一点点代码。
awk 支持正则表达式,所以可以取代grep
awk 内嵌sub,gsub函数,所以可以取代sed.
grep /regular/ 支持--color, -w, -v 等选项
awk '/regular/{print}', match(s,r,[,a]) 与之抗衡。
sed 's///' 一招定天下
awk sub(r,s,[,t]) gsub(r,s,[,t]) gensub(r,s,h,[,t]) 灵活替换。
awk 有数组,有流程。 为百变字符串提供可能。
****************************************
2. awk 之优缺点。
****************************************
--------------------------------------------------------------------------------
a. awk 是一门编程语言, 但不是一门完善的语言。
它内嵌函数未提供的功能,你也很难突破这种限制。
因为它并不能够通过外部修补来扩充它的能力。
--------------------------------------------------------------------------------
例如,若gawk 不扩充strtonum 实现数制转换,
你就无法把16进制字符串
变成数据。看下面例子。
//只支持常规10进制字符串。根据上下文区别是数据还是字符串
[hjj@hjj ~]$ awk 'BEGIN{a="0x2f";printf "%d\n", a}'
0
//能够把16进制字符串变为数据。 如果你想把32进制字符串变成数据,那就对不起了。
[hjj@hjj ~]$ awk 'BEGIN{a="0x2f";b=strtonum(a);printf "%d\n", b}'
47
曾经想写一个自己的str2num, 发现几乎不能,因为awk 不支持字符, if('A'<=v) 的写法是错误的。
--------------------------------------------------------------------------------
b. 特定关键字
awk 没有字符概念,只有字串概念。
所以'A' 的写法是不会出现的,只有"A",'' 用来在命令行下包含整个awk 命令
awk {} 是语句块指示。同时也是扩充正则表达式+?{}元字符。
--------------------------------------------------------------------------------
c. awk 能够在乱军之中取上将首级,如探囊取物。
awk 擅长于文本处理,基于它的正则能力,替换能力和数组能力及编程能力
但你不能指望它做socket, 做驱动处理。它不提供接口,你也无从实现。
--------------------------------------------------------------------------------
----------------------------------------
awk 语言学习. 基本步骤及技能
----------------------------------------
1. 能够输出内容,
典型应用, 会打印hello world
awk 'BEGIN{print "hello"}'
awk 'BEGIN{printf("%d\n"),56+0x21}'
2. 会使用变量,能进行计算和流程控制。条件表达式
典型应用, 会打印ascii 码表, 以字符形式输出整形变量。
awk 'BEGIN{a=0;for(i=0;i<10;i++)a+=i; print a;}'
awk 'BEGIN{for(i=0x20;i<0x80;i++){if(i%16==0)printf("\n");printf("%c",i);}}'
3. 会使用内置函数。
典型应用. "this is a test string", 字符串增,删,改,查。正则匹配。
echo "this is a test string" |awk '{for(i=1;i<=NF;i++)print $i;}'
4. 复杂运算: 构建数组,查表操作等:
典型应用, 玩转ascii 码表,字符串对应的字节流,字节流对应的字符串等。
echo "abd" | awk -F "" 'BEGIN{for(i=0;i<=128;i++)a[sprintf("%c",i)]=i;}{for(i=1;i<=NF;i++)print a[$i];}'
5. 会处理命令行参数, 会处理文件等:
典型应用, 可以与用户交互了。
扩展:
函数: 是一段固定的以形参为局部变量操作代码,有返回值。 函数的存在是为了结构化和重用代码。
awk 的变量都是全局的,除了函数形参是局部的.
每一门语言有它特定的运行环境和适应范围,有它生存的价值,体会到各语言的差异(优略势)是更高的要求。
支持每一种语言的都有其内置的函数库或类库,熟练的前提是熟悉这些内置的功能
- Awk 之我见
- 软件测试之我见
- 学校课程设计之我见
- 项目经理之我见
- Java性能之我见
- 地产泡沫之我见
- 项目经理之我见
- 软件设计之我见
- 移动开发之我见
- 国外电影之我见
- singleton之我见
- SiteMesh 之我见
- jsp template之我见
- jsp template之我见
- 游戏策划之我见
- java模式之我见
- "没有银弹"之我见
- dm分区之我见
- 利用prepareCall加速调用SQL【转自http://blog.sina.com.cn/u/1883416257 】
- 开发复用之表格控件:研发成本降低途径
- U_boot 的 bootcmd 和bootargs参数详解
- ubuntu12.04安装极点五笔
- 深入理解C++中的mutable关键字(牛逼)
- Awk 之我见
- 新浪微博粉丝通推广效果分析
- 单例模式
- JVM 内存设置大小(Xms Xmx PermSize MaxPermSize 区别)
- R语言的S3类与泛型函数
- Mark 下outlier
- WEBAPP介绍及其iOS Web开发技巧总结
- Java Multi-Threading and Concurrency Interview Questions with Answers
- IAR ARM、IAR STM8、IAR MSP430共用一个IDE