awk使用
来源:互联网 发布:学会c语言能干什么 编辑:程序博客网 时间:2024/04/26 01:46
awk的使用看起来比较复杂..貌似有一本好几百页的书就是讲awk的..所以我这里不多言..也就说点常用的命令和了解..
awk处理的是行数据..也就是说awk以行为单位对文件进行处理..它将每行分为不同的域..从1开始标号..分割符默认为空格..但是可以其后指定
基本命令格式:
awk -Fch 'command' files
ch是分隔符..默认为空格..可以不写..也可以是任意字符..
comman是awk要执行的命令..针对每一行进行处理..
files是输入的文件..可以是多个文件或目录..遵循glob元字符处理
awk -f script.file files
我们也可以将指令写到script.file中..这script.file中内容就相当于command..内部无需再加单引号了..直接命令就可以了..
script.file files
我们也可以类似shell一样执行脚本..有两点要求..1是script.file开头必须按惯例写上执行程序..必须写成#!/bin/awk -f..后面这个-f必须有..2是该文件必须可执行
第二种格式中的script.file就无需满足这个条件..仅仅作为命令的集合即可
command内部其实很类似C语言..分为多个执行语句..语句间以空格相隔..每条语句有两部分..一个是条件..一个是命令..只有当条件满足时才会执行命令
如awk '$1~/23/ {print $0}' file
注意..命令必须用"{}"括起来..
其实这个条件呢..也可以写到命令里..不过这样其实就是说原先的条件永远满足..执行命令时再行判断..
如 awk '{if($1~/23/) print $0}' file
这个命令表示一直执行该命令..但是该命令内部有自己的判断..注意..这种语句类似C..如果有多个语句的话..也必须用"{}"括起来..而且语句间也必须用";"(分号)隔开
awk中有两个预设的指令..BEGIN表示在读取文件之前进行的命令..END表示读取文件之后的命令..同时还有一些预设的变量..$no.表示的就是第几个域..$0表示的是该行全部内容..
内置变量:
ARGC:命令行参数个数
ARGV:命令行参数..可以使用ARGV[index]进行索引
ENVIRON:环境参数..也是数组..该数组可以通过ENVIRON[name]索引..同其他动态语言一样..name可以为字符串..
FILENAME:处理的文件名
FNR:文件数量
FS:分隔符..这个既可以读取.也可以设定
NF:域的个数
NR:已读行数
OFS:输出域的分割符(默认是空格)..也是既可读..又可设定
ORS:输出记录分隔符..默认是换行(即输出的每行之间的分割符)
RS:控制记录分隔符..也即是BEGIN之后..END之前的符号..默认是换行符..既可读..又可设定
awk的符号基本同C..仅有正则表达式不一样..//之间为扩展型正则表达式..~表示匹配..!~表示不匹配..其他差不多..
在awk中..除了预设变量我们还可以自定义变量使用..这些变量类似shell..无需声明..直接使用..不同的是这个没有$..跟普通变量无异
awk内置函数如下:
除了常用的print命令外..我们还可以格式化输出.这个很像C里的.printf format_str,var1,var2..具体符号意义如下:
awk中也有流程控制结构,大部分都和C类似..如if else if, while{},do{}while;for(;;){}
唯一的不同是有for in循环..for(var in array){}..
当然..也有break/continue的类似用法..不过有两个很有意思的东东
next:直接截断本行处理..直接读取下一行进行处理
exit:调出执行..直接进入END命令..
awk默认操作是打印输出行..但是如果我们在BEGIN和END中定义有命令..即中间出现了{}.那么默认操作就不执行了..如果我们仅仅想记录某值..那么请不要用{}..而是直接书写命令即可..或者用()括起来也可
如
awk 'tot+$6; END {print "total is "tot}' file
awk '(tot+$6); END {print "total is "tot}' file
就可以把file中第六域相加并在最后输出总和..此时默认打印操作仍然执行
但是这样的话:
awk '{tot+$6} END {print "total is "tot}' file
就只输出总和了..因为我们使用了{}..它代表着awk中间的命令..而语句或者()内语句仅仅是辅助命令..不影响命令本身执行..
这点区别..请体会之..
当然.最重要还是man之..google之..使用之..
- awk使用
- AWK使用
- awk使用
- awk使用
- AWK使用
- awk使用
- awk使用
- awk使用
- awk使用
- awk使用
- awk使用
- awk使用
- awk使用
- awk 使用
- awk使用
- awk使用
- awk 使用
- awk使用
- Android共享文件的几种方式(我这里只总结到了SQLiteDatabase、SharedPreferences、ContentProvider)
- DML(数据操纵语言)
- JDBC
- 毕业十年
- SQLite 入门教程(二)创建、修改、删除表
- awk使用
- Ant入门教程
- TortoiseSVN官方使用手册(中文)
- oracle获取字符串长度函数length()和hengthb()
- posix 多线程小结
- Apple Store 的翻新机怎样?
- error LNK2001: unresolved external symbol
- android 指针根据手势转动
- 【9-14】C笔记