Linux Shell 高级编程技巧1----深入讨论(awk、<<)
1.深入讨论(awk、<<)
1.1.深入讨论awk
记录和域,模式和动作,正则表达式和元字符
基础教程中已经介绍
条件和逻辑操作符
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
~ 匹配正则表达式
!~ 不匹配正则表达式
&& and
|| or
! not
例子(注释:www.log是apache的一个日志文件,这是在日常生活中很常遇见的)
#!/bin/bash
echo "210-219网段的访问量是:`awk '{if ($1~/^21[0-9]/) print $0}' www.log | wc -l`"
echo "非210-219网段的访问量是:`awk '{if ($1!~/^21[0-9]/) print $0}' www.log | wc -l`"
echo "2004年07月07日的访问量是:`awk '{if ($4~/^\[07\/Jul\/2004/) print $0}' www.log | wc -l`"
echo "2004年07月07日/htm/free_call.php的访问量是:`awk '{if ($4~/^\[07\/Jul\/2004/) print $0}' www.log | awk '{if ($7=="/htm/free_call.php") print $0}' | wc -l`"
awk内置变量
内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列,是一个数组,用ARGV[0]、ARGV[1]……的方式
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行参数-F选项
NF 浏览记录的域个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
例子:
awk -F '#' '{print NF,NR,$0}' grade.txt
awk -F '#' '{print NF,NR,ENVIRON["USER"],$0}' grade.txt
awk -F '#' '{print NF,NR,ENVIRON["USER"],$0,FILENAME}' grade.txt
awk -F '#' '{print NF,NR,ENVIRON["USER"],$0,FILENAME,ARGC}' grade.txt
awk -F '#' '{print NF,NR,ENVIRON["USER"],$0,FILENAME,ARGC,ARGV[0]}' grade.txt
补充:grade.txt文件内容
85#senior
87#junior
75#senior
79#senior
92#senior
23#junior
内置的字符串函数
内置字符串函数
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("#","||")) print $0}' grade.txt
awk -F '#' '{if (gsub("s","S",$1)) print $0}' grade.txt
awk -F '#' '{print (index($2,"e"))}' grade.txt
awk转义字符
转义字符
\b 退格键
\t tab键
\f 走纸换页
\ddd 八进制值
\n 新行
\c 任意其他特殊字符,例如\\为反斜线符号
\r 回车键
例子
awk -F '#' '{print (index($2,"s")),"\t",$2}' grade.txt
awk -F '#' '{print (index($2,"s")),"\n",$2}' grade.txt
printf修饰符,类似于C语言的printf函数
printf修饰符
%c ASCII字符
%d 整数
%f 浮点数,例如(123.44)
%e 浮点数,科学计数法
%f 新行
%g awk决定使用哪种浮点数转换e或者f
%o 八进制数
%s 字符串
%x 十六进制数
例子
awk -F '#' '{printf "%c\n",$1}' grade.txt
awk -F '#' '{printf "%c\t%d\n",$1,$1}' grade.txt
awk -F '#' '{printf "%c\t%f\t%d\n",$1,$1,$1}' grade.txt
awk数组
简介
awk数组下标是从 1 而不是 0 开始
例子
awk 'BEGIN {print split("as#qw#1234",array2,"#")}'
awk 'BEGIN {print split("as#qw#1234",array2,"#"); print array2[1]}'
awk 'BEGIN {print split("as#qw#1234",array2,"#"); print array2[1],"\t",array2[2],"\t",array2[3]}'
awk的脚本例子(awk_array.sh 文件)
执行命令./awk_array.sh grade.txt
#!/bin/awk -f
BEGIN{
FS="#"
score["0-60"]=0
score["60-70"]=0
score["70-80"]=0
score["80-90"]=0
score["90-100"]=0
student["junior"]=0
student["senior"]=0
}
{
{
if [ $1<60 ]
score["0-60"]++
}
{
if [ $1<70 ] && [ $1>=60]
score["60-70"]++
}
{
if [ $1<80 ] && [ $1>=70 ]
score["70-80"]++
}
{
if [ $1<90 ] && [ $1>=80]
score["80-90"]++
}
{
if [ $1<=100 ] && [ $1>=90 ]
score["90-100"]++
}
}
{
for senior_junior in student
{
if [ $2==senior_junior ]
student[senior_junior]++
}
}
END{
for number in score
print "The score",number,"has",score[number],"students"
}
{
for senior_junior in student
print "The class has",student[senior_junior],senior_junior,"stuents"
}
}
1.2.深入讨论<<
Linux Shell 高级编程技巧1----深入讨论(awk、<<)的更多相关文章
- Linux Shell 高级编程技巧4----几个常用的shell脚本例子
4.几个常用的shell脚本例子 4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释 4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...
- Linux Shell 高级编程技巧3----运行级别脚本介绍
3.运行级别脚本介绍 3.1.运行级别 运行级别介绍: 0 关机 1 单用户模式 2 多用户模式 ...
- Linux Shell 高级编程技巧2----shell工具
2.shell工具 2.1.日志文件 简介 创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日 ...
- Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程
Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...
- 跟着老男孩一步步学习Shell高级编程实战
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...
- (转)跟着老男孩一步步学习Shell高级编程实战
原文:http://oldboy.blog.51cto.com/2561410/1264627/ 跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...
- Linux环境高级编程--介绍
从今天開始.将开启Linux环境高级编程(Advanced Programming Of Linux Enviroment)的学习笔记或者说总结,我将持续和大家分享自己的学习成果.本系列博客依托于li ...
- Linux C高级编程——文件操作之系统调用
Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的. 库函数是一些完毕特定功能的函数.一般由某个标准组织制作公布,并形成一定的标准.使用库函数编 ...
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader
高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...
随机推荐
- STL next_permutation和prev_permutation函数
利用next_permutation实现全排列升序输出,从尾到头找到第一个可以交换的位置, 直接求到第一个不按升序排列的序列. #include <iostream> #include & ...
- 项目:DoubleFaceCamera
代码在github: https://github.com/Viyu/DoubleFacedCamera 这个app的想法是:用手机的前置和后置摄像头同时拍摄画面合成输出一张图,把拍摄者和被拍摄者的画 ...
- JS 对象遍历
var orgRoot = { 271: {backgroundColor: '#f68f2b', textColor: '#FFFFFF'}, 272: {backgroundColor: '#49 ...
- 用批处理启动MySQL命令行工具
最近在看MySQL,安装好之后,每次在开始菜单去启动MySQL命令行工具的时候,都是直接用root用户连接我本地的数据库 输入密码开始工作,但是要连接服务器上的MySQL的话,就要去CMD下运行 : ...
- C语言宏定义时#(井号)和##(双井号)的用法
C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面 ...
- centos7.0改变用户创建目录组权限
centos7.0改变用户创建目录组权限可通过umask进行设置. 临时改变可通过umask命令进行设置 永久性改变,可通过修改~/.bash_profile的方式进行调整.
- zju3547
题意:给出n(1<=n<=10^8),求小于n的,求所有与n互质的数字的四次幂的加和是多少. 分析:容斥原理 首先要知道四次幂求和公式,1^4+2^4+...+n^4=n*(n+1)*(2 ...
- ACM/ICPC 之 BFS范例(ZOJ2913-ZOJ1136(POJ1465))
通过几道经典BFS例题阐述BFS思路 ZOJ2913-Bus Pass 题意:找一个center区域,使得center到所有公交线路最短,有等距的center则输出id最小的. 题解:经典的BFS,由 ...
- 1. EasyUI 学习总结(一)——对话框dialog
文章参考来源:http://www.cnblogs.com/xdp-gacl/p/4075079.html 感谢博主的分享,写得非常精细,我在这边给看过的做一个记录. 一.EasyUI下载 使用eas ...
- Spring@Autowired注解与自动装配
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...