- 论坛徽章:
- 0
|
本帖最后由 dream_my_dream 于 2015-05-14 22:21 编辑
1、字段分割
awk '{print "first:" $1 "last:" $4} ' forawk
awk -F ":" '{print "user:" $1 "\tshell:" $7}' forawk
-F参数设置的是awk的初始变量FS,FS变量控制着awk的字段分隔符,默认情况下是空白字符。
2、AWK代码结构
将awk的运行看成3部分组成:处理输入前的初始化,处理输入过程,处理完所有输入后的扫尾工作。BEGIN和END分别映射到第一部分和第三部分。
(1)BEGIN代码快
awk脚本包含一个BEGIN代码快,格式是BEGIN标签加上{}。当脚本很简单时,使用-F参数能减少输入的字符数,但是,当脚本很复杂时,使用FS参数清晰的显示了awk的逻辑。
awk 'BEGIN{FS=":"}{print "user:" $1 "\tshell" $7}' forsed
(2)END代码快
[root@forshell shell]# cat end
BEGIN{print "how many people with nologin?"}
写在BEGIN代码块中的代码只在初始化时被运行一次
/nologin/{++adder}
与正则表达式匹配,成功,执行++adder
END{print "'nologin' appears "adder" times"}
[root@forshell shell]# awk -f end /etc/passwd
how many people with nologin?
'nologin' appears 25 times
[root@forshell shell]# grep -c nologin /etc/passwd
25
(3) 模式匹配
/正则表达式/ {匹配后执行的操作}
[root@forshell shell]# awk -F ":" '/bin\/bash/ {print "hello," $1}' /etc/passwd
hello,root #匹配/bin/bash
hello,pop
hello,ling
awk 'BEGIN{FS=":"} /bin\/bash/ {print "hello," $1}' /etc/passwd
3、变量
变量使用无需先声明,变量只存储字符串,当需要时在转换为其他类型
大小写敏感。局部变量小写,全局变量带一个字母大写,内建变量全部大写。
常用的内建变量:
FS:字段分割符,默认为空格 RS:输出记录分割字符
OFS:输出字段分割字符 ORS:输出记录分割字符,默认为“\n”
NR:在工作中的记录数 FNR:当前输入文件的记录数
NF:当前记录的字段数
4、格式化输出
Print:打印整行,输出到stdout
Printf :将格式化字符串打印到stdout
Sprintf :返回可以赋值给变量的格式化字符串
5、字符串函数
(1)子字符串查找
index(str,substr) :返回子串在整个串中第一次出现的位置。
函数字符串开始位置为1,没有找到子串返回0.
(2)子字符串提取
substr(str,position,[length]):返回str中从position开始的length个字符
[root@forshell shell]# cat info.txt
029-587-49079:Lily
029-587-49081:Kathy
[root@forshell shell]# awk '{print substr($1,5,9)}' info.txt
587-49079
587-49081
(3)字符串匹配
match(str,/reg/):如果在串str中找到正则/reg/匹配的串,则返回出现的位置,未找到则返回0。
与index()的区别:index()函数是查找固定字符串的位置,match()支持正则表达式查询。
(4)子字符串替换
sub(/reg/,replacement,target):只替换第一个匹配字符串。与正则表达式/reg/进行匹配,将target中左边最长的匹配部分替换成replacement。如果没有给定target,则默认使用整条记录。
gsub(/reg/,replacement,target):替换所有匹配的字符串。
# echo "testthisistest test"|awk '{gsub(/test/,"mytest");print}'
mytestthisismytest mytest
#echo "testthisistest test"|awk '{sub(/test/,"mytest");print}'
mytestthisistest test
(5)大小写转换
toupper(str):对字符串进行大小写转换
tolower(str):对字符串进行大小写转换
|
|