shell编程笔记二
深入讨论awk
条件操作符
<
>=
<=
==
!=
~
!~
逻辑操作符
&& and
|| or
! not
awk '{if ($4~/^\[17\/May\/2006/) print $0}' log.txt |wc -l
awk '{if ($1!~/^218\.98\.157\.105/) print $0} log.txt' |wc -l
awk的内置变量
ARGC //命令行参数个数
ARGV //命令行参数排列,数组使用形式ARGV[]
ENVIRON //支持队列中环境变量的使用,在awk中取得环境变量的值,使用形式ENVIRON["变量"]
FILENAME //awk浏览的文件名
FNR //浏览文件的记录数
FS //设置输入域分隔符,等价于命令行 -F选项
NF //浏览记录的域个数
NR //已经读出的记录数
OFS //输出域分隔符
ORS //输出记录分隔符
RS //控制记录分隔符
awk -F '+' '{print NR,NF,ENVIRON["USER"],ARGC,ARGV[0]$0}' hello //输出结果如下
1 2 root 2 awk lskdfsdfi + sdfasdfsdf
2 2 root 2 awk adf +sdfasdf
3 2 root 2 awk asdf+safsdf
4 2 root 2 awk as+asdfasdf
5 4 root 2 awk df+sfasdf+asfas+afsadfs
字符串函数
gsub(r,s) //在整个$0中用s替代r
gsub(r,s,t) //在整个t中用s替代r
index(s,t) //返回s中字符串t的第一次出现位置
length(s) //返回s长度
match(s,r) //测试s是否包含匹配r的字符串
split(s,a,fs) //用fs上将s分成序列a
sprint(fmt,exp) //返回经fmt格式化后的exp
sub(r,s) //用$0中最左边最长的子串替代s
substr(s,p) //返回字符串s中从p开始的后部分
substr(s,p,n) //返回字符串s中从p开始长度为n的后缀部分
awk -F '#' '{if (gsub("s","S")) print $0}' hello.txt //查找hello.txt文档用大写的S替换小写的s
awk -F '#' '{if (gsub("s","S",$2)) print $0}' hello.txt //查找每一行的第二列用S替换s
awk -F '#' '{print index($2,"e")}' text.txt //查找第二个域中每条记录内e第一次出现的位置
printf修饰符
%c //ASCⅡ字符
%d //整数
%f //浮点数
%e //浮点数,以科学技术法表示
%g //新行
%o //八进制数
%s //字符串
%x //十六进制数
awk -F '#' '{printf "%c",$1}' hello.txt
awk -F '#' '{printf "%c\t%d\n",$1,$2}' hello.txt
awk数组
awk 'BEGIN{print split("as#bs#123",array,"#")}' //创建包含3个元素的数组arry,以#号分隔
awk 'BEGIN{print split("as#bs#123",array,"#");print array[1]}' //打印数组中的第1个元素
输入重定向
file
被重定向的文档
file
信号的捕捉 //示例见advshellscript2.sh
trap "name" signal(s) //name通常为一个函数,用来处理捕捉到的信号;signal为捕捉到的一个或多个信号
trap "hello" 2 //捕捉编号为2的信号,并把信号发送给hello函数进行处理
向messages发送信息
logger -p 1 -i "hi nihao" //向messages发送等级为1,内容为"hi nihao"的记录
阅读(1211) | 评论(0) | 转发(0) |