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. 堆与栈(heap and stack)在c/c++的应用(概念)

    在学习c/c++时,我们经常会遇到 堆与栈 的问题,今天就来讲一下各类情况下的heap,stack的应用. 程序内存布局场景下,堆与栈表示两种内存管理方式: 1.内部分配时,堆和栈表示两种不同的内存管 ...

  2. 3.Python网络编程_多任务问题抛出

    #单线程程序 import time def sing(): """唱歌5秒钟""" for i in range(5): print(&q ...

  3. C语言异常处理

    异常的概念-程序在运行过程中可能产生异常-异常(Exception)与Bug的区别 异常是程序运行时可预料的执行分支 Bug是程序中的错误,是不被预期的运行方式 异常(Exception)和Bug的对 ...

  4. eclipse创建java项目

    工欲善其事必先利其器,记录一下eclipse怎么创建java项目 0x01:选择工作空间 打开eclipse出现的下面第一个界面,选择java project的空座区间,简单的说就是把你创建的java ...

  5. pyse基本操作命令一

    #coding=utf-8import timefrom selenium import webdriver dr = webdriver.Chrome()# dr = webdriver.Ie()d ...

  6. jQuery中的事件对象(八)

    Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 一.事件对象基本认识 1. 什么时候会产生Event 对象呢?  例如: 当用户单击某个元素的时 ...

  7. 数组去重--ES6方法

    数组去重方法1:用es6的set和...扩展运算符 let arr = [1,2,3,4,4,5,2]; console.log([...new Set(arr)]) // [1, 2, 3, 4, ...

  8. Erlang基础2

    1. apply apply(Mod, Func, [Arg1, Arg2, ..., ArgN]) 等价于 Mod:Func(Arg1, Arg2, ..., ArgN) 区别在于,使用apply, ...

  9. webpack打包教程(一)常用loader详解

    1.打包图片 // { // test: /\.(png|jpe?g|gif)$/i, // use: [{ // loader: 'file-loader', // options: { // na ...

  10. LeetCode 733: 图像渲染 flood-fill

    题目: 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间. An image is represented by a 2-D array of int ...