来源:自学PHP网 时间:2015-04-17 17:13 作者: 阅读:次
[导读] awk:awk名来:三个人名的缩写,他们是:Aho、(Peter)Weinberg 和(Brain)Kernighan;行处理时可以处理行内字段,这是grep sed搞不定的;特殊地,用$0表示正行;用法:awk [ -F re] [parameter ] [ prog...
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 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com