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. json.loads() json解码

    有些json数据里面套着json    一次json.loads()后还是会有数据是json格式 { "result": { "error_code": 0, ...

  2. django获取某一个字段的列表 values values_list flat=true

    1.values() print(Question.objects.values('title')) #得到的是一个字典 <QuestionQuerySet [{'title': '查询优化之s ...

  3. 201871010113-刘兴瑞《面向对象程序设计(java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>    https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ...

  4. django内容回顾:

    Django 下载安装 命令行 pip install django==1.11.26 -i 源 pycharm 创建项目 命令行 django-admin startproject 项目名 pych ...

  5. 文件名工具类 MoFileNameUtil

    文件名工具类 MoFileNameUtil MoFileNameUtil public class MoFileNameUtil { //不包含点号 public static String getF ...

  6. jQuery中的文档处理(五)

    1. append(content|fn), 向每个匹配的元素内部追加内容 在内部结尾添加. 参数说明: content:String, Element, jQuery,要追加到目标中的内容 func ...

  7. jQuery中Ajax(三)

    1. jQuery.ajaxSetup([options]), 设置全局 AJAX 默认选项. 参数见 'jQuery.ajax(url,[settings])' 说明. 2. jQuery.ajax ...

  8. table的常用属性

    Table属性: Cellspacing:单元格与单元格之间或者单元格与表格之间的 距离. Cellpadding:单元格边框与内容之间的距离 Colspan:跨列.合并列. Rowspan:跨行,行 ...

  9. 深度解密Go语言之unsafe

    目录 指针类型 什么是 unsafe 为什么有 unsafe unsafe 实现原理 unsafe 如何使用 获取 slice 长度 获取 map 长度 map 源码中的应用 Offsetof 获取成 ...

  10. Unreal Engine 4 系列教程 Part 10:制作简单FPS游戏

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...