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. linux学习(二)linux系统的安装

    Linux 安装 本章节我们将为大家介绍 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果直接不想搭建,也可以直接买一台学习用用,参考各大云服务器比较. 本章节以 ce ...

  2. CF92B-Binary Number-(思维)

    https://vjudge.net/problem/CodeForces-92B 题意:给一个长度为106的二进制数,有两种操作,第一种是除以2,第二种是末尾+1,以二进制运算,问这个二进制数最少几 ...

  3. ABP docker发布

    环境:CentOS 7.6 64位 linux基本命令: cd:进入某个文件夹 mkdir:创建文件夹 ls:显示文件 ll:罗列出当前文件或目录的详细信息 判断是文件 还是文件夹: Linux系统中 ...

  4. split task

    和印度的team合作的时候,他们经常有些要求,然后我们这边有时候需要改代码来满足他们的需求. 最近一次,他们要求在我们的一个工具中为他们加入2个asp.net的注册命令,不知道什么原因,system ...

  5. Project Euler Problem 675

    ORZ foreverlasting聚聚,QQ上问了他好久才会了这题(所以我们又聊了好久的Gal) 我们先来尝试推导一下\(S\)的性质,我们利用狄利克雷卷积来推: \[2^\omega=I\ast| ...

  6. CAS单点登录之支持数据库认证

    本博客介绍一下基于CAS4.2.7的配置,之前博客CAS4.2.7服务端配置已经介绍了怎么部署CAS服务端,不过在登录机制是用固定的账号密码登录,实际项目肯定不可以这样做,所以本博客怎么配置CAS服务 ...

  7. TP5 使用验证码功能

    工作中后台开发使用的是 TP5,但是对语法不是很熟悉,总是看着手册写代码.当时做 Java 的时候也是这样,很多语法需要靠百度.不是不能写代码,但是这样的效率感觉不高,没有行云流水的感觉,要是能有聊天 ...

  8. RHCE实验记录总结-1-RHCSA

    不管是运维还是开发系统的了解下Linux或者系统的温习整理一下Linux知识点无疑是较好的,这篇文章是对RHCSA&RHCE实验进行一个汇总,是我为了做实验方便(并分享给朋友)的一篇文章. 前 ...

  9. Django学习笔记(17)——BBS+Blog项目开发(1)验证码功能的实现

    本文主要学习验证码功能的实现,为了项目BBS+Blog项目打下基础. 为了防止机器人频繁登陆网站或者破坏分子恶意登陆,很多用户登录和注册系统都提供了图形验证码功能. 验证码(CAPTCHA)是“Com ...

  10. HTTP Error 502.5 - ANCM Out-Of-Process Asp.Net Core发布到IIS失败

    问题概述 asp.net core网站发布到windows server 2012r2 IIS后,出现这个报错.dotnet xx.dll命令网站能够正常运行.说明不是程序问题. 经过一番折腾终于部署 ...