频道栏目
首页 > 系统 > win7激活工具 > 正文

awk笔记

2015-02-06 10:16:04         来源:箫声清阳的空间  
收藏   我要投稿
awk:
awk名来:三个人名的缩写,他们是:Aho、(Peter)Weinberg 和(Brain)Kernighan;
行处理时可以处理行内字段,这是grep/sed搞不定的;特殊地,用$0表示正行;
用法:awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
-F 列分隔符;
prog:'pattern {action}',pattern是特定字符串,支持正则,如cat uids | awk '/[0-9]+\.[0-9]*/{print}';
-f:符合awk语法的脚本文件;
in_file:输入文件,允许多个输入文件;???
pattern字符表示:
\ 换码序列
^ 在字符串的开头开始匹配
$ 在字符串的结尾开始匹配
. 与任何单个字符串匹配
[ABC] 与[]内的任一字符匹配
[A-Ca-c] 与 A-C 及 a-c 范围内的字符匹配(按字母表顺序)
[^ABC] 与除[]内的所有字符以外的任一字符匹配
Desk|Chair 与 Desk 和 Chair 中的任一个匹配
[ABC][DEF] 关联。与 A、B、C 中的任一字符匹配,且其后要跟 D、E、F 中的任一个字符。
[ABC]* 与 A、B 或 C 中任一个出现 0 次或多次的字符相匹配
[ABC]+ 与 A、B 或 C 中任何一个出现 1 次或多次的字符相匹配
? 与一个空串或 A、B 或 C 在任何一个字符相匹配
(Blue|Black)berry 合并常规表达式,与 Blueberry 或 Blackberry 相匹配
算术运算符:
x^y x 的 y 次幂
x**y 同上
x%y 计算 x/y 的余数(求模)
x+y x 加 y
x-y x 减 y
x*y x 乘 y
x/y x 除 y
-y 负 y(y 的开关符号);也称一目减
++y y 加 1 后使用 y(前置加)
y++ 使用 y 值后加 1(后缀加)、
--y y 减 1 后使用 y(前置减)
y-- 使用后 y 减 1(后缀减)
x=y 将 y 的值赋给 x
x+=y 将 x+y 的值赋给 x
x-=y 将 x-y 的值赋给 x
x*=y 将 x*y 的值赋给 x
x/=y 将 x/y 的值赋给 x
x%=y 将 x%y 的值赋给 x
x^=y 将 x^y 的值赋给 x
x**=y 将 x**y 的值赋给 x
逻辑运算符:
x==y
x!=y
x>y
x>=y
x<y
x<=y
x~re
x!~re
内置变量:
ARGC: 命令行参数的数目。
ARGIND: 命令行中当前文件的位置(从0开始算)。
ARGV: 包含命令行参数的数组。
CONVFMT: 数字转换格式(默认值为%.6g)
ENVIRON: 环境变量关联数组。
ERRNO: 最后一个系统错误的描述。
FIELDWIDTHS: 字段宽度列表(用空格键分隔)。
FILENAME: 当前文件名。
FNR: 同NR,但相对于当前文件。
FS: 字段分隔符(默认是任何空格)。
IGNORECASE: 如果为真,则进行忽略大小写的匹配。
NF: 当前记录中的字段数。
NR: 当前记录数。
OFMT: 数字的输出格式(默认值是%.6g)。
OFS: 输出字段分隔符(默认值是一个空格)。
ORSL : 输出记录分隔符(默认值是一个换行符)。
RLENGTH: 由match函数所匹配的字符串的长度。
RS: 记录分隔符(默认是一个换行符)。
RSTART: 由match函数所匹配的字符串的第一个位置。
SUBSEP: 数组下标分隔符(默认值是\034)
内置函数:类C风格用法;
printf:格式化输出,比如 awk '{printf "%03d%s\n",NR,$1}' myfile
N gsub(reg,string,target) 每次常规表达式 reg 匹配时替换 target 中的 string
N index(search,string) 返回 string 中 search 串的位置
A length(string) 求串 string 中的字符个数
N match(string,reg) 返回常规表达式 reg 匹配的 string 中的位置
N printf(format,variable) 格式化输出,按 format 提供的格式输出变量 variable。
N split(string,store,delim) 根据分界符 delim,分解 string 为 store 的数组元素
N sprintf(format,variable) 返回一个包含基于 format 的格式化数据,variables 是要放到串中的数据
G strftime(format,timestamp) 返 回 一 个 基 于 format 的 日 期 或 者 时 间 串 ,timestmp 是 systime()函数返回的时间
N sub(reg,string,target) 第一次当常规表达式 reg 匹配,替换 target 串中的字符串
A substr(string,position,len) 返回一个以 position 开始 len 个字符的子串
P tolower(string) 返回 string 中对应的小写字符
P toupper(string) 返回 string 中对应的大写字符
A atan(x,y) x 的余切(弧度)
N cos(x) x 的余弦(弧度)
A exp(x) e 的 x 幂
A int(x) x 的整数部分
A log(x) x 的自然对数值
N rand() 0-1 之间的随机数
N sin(x) x 的正弦(弧度)
A sqrt(x) x 的平方根
A srand(x) 初始化随机数发生器。如果忽略 x,则使用 system()
G system() 返回自 1970 年 1 月 1 日以来经过的时间(按秒计算)
流程控制:
逻辑运算符:......
BEGIN/END:
if-else:
while/do-while/for/
break/continue/exit(退出但不跳过END)
next:读取下一条记录;
内容控制:
读入文件:getline
关闭文件:close,可以针对getline打开的文件;
导出文件: printf("hello word!\n")>>"datafile"
导出到其它命令:printf("hello word!\n")|"sort -t','"
读入其它命令结果:who -u | awk '{printf("%s 正在执行%s\n",$2,$1)}'
在 awk 中执行 shell 命令行:嵌入函数 system(),该函数将传给它的参数视作命令执行:END {close("myreport.txt");system("lp myreport.txt");}
示例:
显示文本第7~15行:awk -F % 'NR==7,NR==15 {printf $1 $3 $7}'


技巧or注意:
1 如果要让 awk所使用变量的明确类型,应当在在程序中给它赋初值;awk不知道时默认字符串类型;
2 如果读入某列是数值且做数值处理时,如果某行该列不是合法数字,则awk将其视为0处理;
3 for ( x in myarray )打印数组时,并不依照顺序,可能是乱序输出;
4 if (1 in fooarray),数组是否包含该值????好像不起效果啊
5
相关TAG标签 笔记
上一篇:nginx增加spdy支持并测试
下一篇:解决SolidConverterPDF的缓存文件对C盘的占用
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站