今天从linux学习开始,没有什么规划,就简单记下笔记。
Linux awk
简介
- awk是unix下脚本语言,用来对文本进行处理、分析,生成报告,功能强大.
- linux使用的命令也是awk,但是实际是GUN的gawk,所以当前学习用的实际是gawk。
===========================================
awk方式
- awk [options] ’script’ var=value file(s)
- awk [options] -f scriptfile var=value file(s)
===========================================
options:
- -F “”:用来设置处理文本时的域分隔符 默认是空格和tab
例:awk -F “:” ‘{print $1}’ /etc/passwd - -v var:用来设置要传入脚本的变量,一个变量前一个-v
例:awk -v var1=1 -v var2=2 ‘{print var}’ /etc/passwd
===========================================
脚本的格式pattern {action}
- pattern:
/正则表达式/
限定行:如.’NR<=2’输出前两行
BEGIN:不进行记录匹配和处理,一般用来定义变量还有打印输入内容的开头,如列名
END:匹配并处理结束后,当前匹配的行是最后一行,可以用来打印最后一行’END{print}’,输出统计等信息
- action:
定义变量:var=121;
打印内容:print printf
内置函数:split()
控制语句:if while
预定义的变量
- $0:当前匹配的整条记录
- $n:当前记录的第n个域
- ARGC:命令行中传入参数的个数,不包括option的所有参数都算在内,具体见ARGV
ARGV:包含所有命令行参数的数据,在被处理文件前的参数可以在BEGIN中使用,如var,在BEGIN后的参数不能在BEGIN中使用,如asf。
ARGV[0]=awk
例:awk -v kk=23 -v jj=3 ‘{print jj,kk,ARGV[0],ARGV[1],ARGV[2],var,ARGC}’ var=5 go asf=5
3 23 awk var=5 go 5 4NR:当前匹配到的记录条数
- FNR:同NR,但区分文件,不同文件,分开计算
- FS:域分隔符设置,域option -F 功能相同,FS=”:”
- NF:当前匹配记录的域个数
- RS:记录的分隔符,默认是换行符
===========================================
操作符
“+ - * / % = ^”
“< >= <= !=”
&& || !
空格,可以用来连接字符串
正则表达式,之后再专门学习
匹配符号~
用来在记录或域进行匹配正则表达式
例.awk ‘$1~/^root/’ /etc/passwd
管道与重定向,刚入门还是不深入,之后再看
控制语句
跟c基本一致
1. if( ){}
else if( ){ }
else{ }
2. while( ){ }
3. special for循环用于读取关联数组中的元素。格式如下:
{for (item in arrayname){
print arrayname[item]
}
}
内建函数
字符串函数
- sub函数,一个参数为正则表达式,第二个参数为用来替换的字符串,第三个参数可选,用来指定要替换的域如$1,只替换匹配到的一个内容
sub (regular expression, substitution string, target string) - gsub函数,同sub功能,替换所有匹配到的内容
gsub (regular expression, substitution string, target string) - index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。格式如下:
index(string, substring) - length函数,返回字符串长度
length(srting) 返回指定字符串长度
length 返回记录的长度 - substr函数返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串。格式如下:
substr( string, starting position, length of string ) - split函数可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割。格式如下:
split( string, array, field separator )
数学函数
- int(x)取整,不舍入
- sqrt(x)平方根
- rand()产生一个0 1之间的随机数
自定义函数
在awk中还可自定义函数,格式如下:
function name ( parameter, parameter, parameter, … )
{
statements
return expression
}
时间函数
- systime() 秒单位,从1970.1.1开始
- strftime函数使用C库中的strftime函数格式化时间。格式如下:
systime( [format specification][,timestamp] )
学习文档、内容参考:
http://www.cnblogs.com/wangkangluo1/archive/2012/04/18/2455097.html
http://www.jellythink.com/archives/1252
http://www.cnblogs.com/repository/archive/2011/05/13/2045927.html
http://blog.csdn.net/hyholine/article/details/7254596
2015.10.29乱七八糟的,以后有机会学一下markdown!
2015.11.4 重新编辑了一下