AWK
awk 是一个优良的文本处理工具,其名字来源于三个开发人员的名字首字母缩写。
awk 不但是一个优良的文件处理工作,它还可以自己编程,编写awk 程序
 
AWK基本格式:
     awk [option] 'BEGIN{...}{...}END{...}' [file]
 
option:
  -F   指定字段分隔符,如果出现在文件中的话,要用FS=
  -f file   指定命令文件
 
BEGIN{...}  起始段,里面的命令只执行一次且最先执行
 
{...}      主体,里面的命令,会执行多次,处理的文件有多少行,就执行多少次,相当于之前的循环体(多次执行)
 
END{...}    结束段,前面几段运行完后,再执行,里面的命令也只执行一次
 
AWK 使用方法:
1、命令行
awk -F: '{print $1}' /etc/passwd

2、命令文件

cat awk.cmd
{
print $5 "'s name is "$1","$5"'s userid is "$3
}
awk -F: -f awk.cmd /etc/passwd

3、用awk解释器

cat a1.awk
#!/bin/awk -f
{
print $5 "'s name is "$1","$5"'s userid is "$3
}
chmod 755 a1.awk
./a1.awk /etc/passwd
 
 
多条命令的执行:
分号(;) 分隔
echo "My name is tom" | awk '{$4="mary";print $0}'
My name is mary
 
AWK可以调用系统命令:
system (命令名)
 
AWK 变量
    AWK 有内置变量,也支持用户自定义变量
内置变量:
$0 整行文本
$1 第一个字段
$2 第二个字段
$3 第三个字段
...
$NF 最后一个字段
NF 字段个数
NR 记录个数
 
自定义变量
变量由字母、数字、下划线组成,不能以数字开头,变量区分大小写
另:在awk 中,变量取值时,一般不要在前面加 $
 
自定义变量赋值的方法:
1、在脚本中(或命令行中)
   awk 'BEGIN{t="abc+defg";print t}'
2、在awk外部(如shell提示符)
cat awk.cmd
{
print $n
}
awk -F: -f awk.cmd -v  n=7  /etc/passwd
 
AWK使用正则表达式
AWK使用正则表达式,正则表达式要出现在 // 中
 
如:打印包含root的行的用户和shell
AWK匹配操作符:  ~
格式:~ /正则表达式/
 
或:
! ~ /正则表达式/
 
例:打印以n开头的用户
awk -F: '/^n/{print $0}' /etc/passwd
awk -F: '$0 ~ /^n/ {print $0}' /etc/passwd
例:打印用户id以1开头的行
awk -F: '$3 ~ /^1/{print $1"   "$3"  "$7}' /etc/passwd
例:显示每个用户的用户名和它的shell
awk -F: '{print $1"             "$7}' /etc/passwd
例:显示每个磁盘的设备名、挂载点和它的使用百分比
df -h | awk '{printf("%-15s%-15s%-35s\n", $1,$6,$5)}'
另:awk中可以进行一些简单编程
    
运算符:
数学运算符:
    >
<
>=
<=
==
!=
例:打印组id为0的用户
  awk -F: '$4=0{print $0}' /etc/passwd
关系运算符:
>
<
>=
<=
==
!=
~   
!~
逻辑运算符
||
&&
!
 
AWK命令行中进行条件判断
条件放在{command}之前,不要if什么的(文件中要用if)
例:打印 用户id在10以内的用户名,id ,shell
AWK的流程控制:
if (condition) {
commands
    }
作用:判断condtion是否成立,成立执行commands
if (condition) {
commands1
    }
else
    {
commands2
    }
作用:判断condtion是否成立,成立执行commands1,不成立执行commands2
while ()
    {
commands
    }
例:打印  /etc/passwd 偶数行
  awk 'NR%2 == 0{print $0}' aa.txt
 
例:用awk 统计一个文件的空行数
#!/bin/awk -f
BEGIN{
c=0
}
{
if ($0 ~ /^ *$/) {
c=c+1
}
}
END {
print c
}
[root@t183 test]# ./a2.awk aa.txt
5.例:awk求指定数的阶乘,数由调时给定
[root@t183 test]# cat a3.awk
BEGIN {
s=1
while (n>1) #n是由外部给定的求阶乘的数
{
s=s*n
n=n-1
}
print s
}
[root@t183 test]# awk -f a3.awk -v n=5
120
 
   

12、shell_awk的更多相关文章

  1. ABP(现代ASP.NET样板开发框架)系列之12、ABP领域层——工作单元(Unit Of work)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之12.ABP领域层——工作单元(Unit Of work) ABP是“ASP.NET Boilerplate Pr ...

  2. EC笔记:第二部分:12、复制对象时勿忘其每一个成分

    EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ p ...

  3. 12、uwp 开发的零碎总结

    1.在给位 “修正版本号”(Major.Minor.Build.Revision)不能修改. 后, 商店上传失败,描述信息为:Apps are not allowed to have a Versio ...

  4. 12、借助Jacob实现Java打印报表(Excel、Word)

    12.使用Jacob来处理文档 Word或Excel程序是以一种COM组件形式存在的.如果能够在Java中调用相应组件,便能使用它的方法来获取文档中的文本信息.Jacob是一个JAVA到微软的COM接 ...

  5. 11、可扩展MySQL+12、高可用

    11.1.扩展MySQL 静态分片:根据key取hash,然后取模: 动态分片:用一个表来维护key与分片id的关系: 11.2.负载均衡 12. 12.2导致宕机得原因: 35%环境+35%性能+2 ...

  6. mysql数据库优化课程---12、mysql嵌套和链接查询

    mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...

  7. laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)

    laravel基础课程---12.lavarel的ajax操作2(lavarel的ajax使用总结) 一.总结 一句话总结: 比较简单:就是js请求ajax,然后控制器获取请求参数,返回数据即可 1. ...

  8. 妙味css3课程---1-2、css3中新增的伪类和伪元素有哪些

    妙味css3课程---1-2.css3中新增的伪类和伪元素有哪些 一.总结 一句话总结: 1.div:target{}是什么意思? 比如a标签的锚点链接到div,div:target{}就可以找到这个 ...

  9. 12、生命周期-@Bean指定初始化和销毁方法

    12.生命周期-@Bean指定初始化和销毁方法 Bean的生命周期:创建->初始化->销毁 容器管理bean的生命周期 我们可以自定义初始方法和销毁方法,容器在bean进行到当期那生命周期 ...

随机推荐

  1. Java面试之synchronized 和 static synchronized

    ​面试题: 答案: 不能 不能 不能 不能 能 正文 概述 通过分析这两个用法的分析,我们可以理解java中锁的概念.一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念), ...

  2. Jsoup获取部分页面数据失败 Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml

    用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...

  3. (day53)五、模型层(ORM)、settings文件配置

    目录 一.settings配置 (一)测试文件配置 (二)查看对应sql语句 二.模型表数据的增删改查 (一)创建数据 (1)create方法 (2)利用对象的绑定方法 (二)修改数据 (1)利用qu ...

  4. 剑指Offer-5.用两个栈实现队列(C++/Java)

    题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈的特点是先进后出,队列的特点则是先进先出. 题目要求我们用两个栈来实现一个队列,栈和队列都有入栈 ...

  5. Python Singleton Pattern(单例模式)

    简介 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 当 ...

  6. 【未完成】【oracle】存储过程按日期循环

    ............. DECLARE         V_IMPORT_DATE DATE;        V_BUSI_DATE DATE;        OUT_RET  NUMBER; - ...

  7. 生成git的SSH公钥

    1.右键,点击  git bash here 2.安装成功后设置用户和邮箱git config --global user.name "name"git config --glob ...

  8. golang实战--家庭收支记账软件(面向过程)

    1.开发流程 2.目标 模拟实现一个基于文本界面的(家庭记账软件) : 初步掌握编程技巧和调试技巧: 主要包含以下知识点:局部变量和基本数据类型.循环语句.分支语句.简单屏幕格式输出.面向对象编程: ...

  9. Python连载17-排序函数&返回函数的函数

    一.高阶函数-排序 1.定义:把一个序列按照给定算法进行排序 2.key:在排序前对每一个元素进行key函数运算,可以理解成按照key函数定义的逻辑进行排序 3.python2和python3相差巨大 ...

  10. 项目整合SpringDataRedis

    1:准备工作 先导入redis和jedis依赖,在配置redis-config.properties 和applicationContext-redis.xml (详细配置信息及入门demo见我上一篇 ...