命令主要用法
  -格式1:前置命令 | awk [选项] '[条件]{编辑指令}'
  -格式2:awk [选项] '[条件]{编辑指令}' filename

常用命令选项
  -F:指定分隔符,可省略(默认空格或者Tab位)
  -f:调用awk脚本尽心个处理
  -V:调用外部shell变量

内置变量
  变量       用途
  FS        保存或设置字段分隔符,如FS=":"
  $n        指定分隔的第n个字段,例如$1,$4分别表示第1例,第4例
  $0        当前读入的整行文本内容
  NF        记录当前处理行的字段个数(有多少列)
  FNR        记录当前处理行在原文本内的行号
  NR        记录当前已经读入行的数量(多个文本一起读取时,行数累加)
  FILENAME  当前处理的文件名
  ENVIRON   调用shell环境变量,格式:ENVIRON["变量名"]

awk过滤的时机
  BEGIN{}
    读入第一行文本之前执行
    一般用来初始化操作
  逐行处理{}
    逐行读入文本执行相应的处理
    是最常见,用得最多的编辑指令块

  END{}
    处理完最后一行文本后执行
    一般用来统计或处理结果
    

[root@localhost ~]# awk '{print "第" FNR"行" ,"有"NF"列"}' a.txt
第1行 有2列
第2行 有4列
第3行 有2列
第4行 有3列

1)输出当前用户的UID

[root@localhost ~]# awk -F: '$1==ENVIRON["USER"]{print $3}' /etc/passwd

2)预处理

[root@localhost ~]# awk 'BEGIN{a=10;print a+10}'

3)统计使用bash的用户数量

[root@localhost ~]# awk 'BEGIN{x=0}/\<bash$/{x++}END{print x}' /etc/passwd

awk处理条件概述
  格式
    awk [选项] '[条件]{指令}' filename
  条件的表现形式
    正则表达式
      /正则内容/
      ~匹配,!~不匹配
    数值/字符串比较
      ==,!=,>=,<=,>,<等
    逻辑比较
      &&逻辑与:期望多条件都成立
      ||逻辑或:只要有一个条件成立即满足要求
    运算符
      -,+,*,/,%,++,--,+=,-=,*=,/=

1)正则内容

[root@localhost ~]# awk -F: '/^root/{print}' /etc/passwd
root:x:::root:/root:/bin/bash

2)~匹配,!~不匹配

[root@localhost ~]# awk -F: '$7!~/nologin/{print}' /etc/passwd
root:x:::root:/root:/bin/bash
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt

3)==,!=,>=,<=,>,<等,输出第二行文本

[root@localhost ~]# awk 'NR==2{print}' /etc/passwd
bin:x:::bin:/bin:/sbin/nologin

4)&&逻辑与:期望多条件都成立

[root@localhost ~]# awk -F: '$3>=0&&$3<=10{print $1,$3}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
uucp

5)运算符,统计文本总字段数量

[root@localhost ~]# awk -F: 'BEGIN{i=0}{i+=NF}END{print i}' /etc/passwd

awk流程控制
  单分支
    if(条件){指令}
  双分支
    if(条件){指令}else{指令}
  多分支
    if(条件){指令}else if{指令}else{指令}

  while循环
    while(条件){指令}
  do while
    do{指令}while(条件)

  for循环
    for(初始值;条件;步长){指令}

1)统计UID小于或等于500的用户个数

[root@localhost ~]# awk -F: 'BEGIN{i=0;j=0}{if($3<=500){i++}else{j++}}END{print i,j}' /etc/passwd
 

2)统计root出现次数

[root@localhost ~]# awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd

3)for循环

[root@localhost ~]# awk 'BEGIN{for(i=0;i<=10;i++){print i}}'

数组
  定义数组
    格式:数组名[下标]=元素值
  调用数组
    格式:数组名[下标]
  遍历数组
    用法:for(变量 in 数组名){print 数组名[变量]}
  数组的经典使用
    去除文本重复行:awk '!a[$2]++{print $2}' filename
    逐行分析,遇到重复行就跳过

1)去重

[root@localhost ~]# cat a.txt 

[root@localhost ~]# awk '!a[$2]++{print $2}' a.txt

2)列出用户登陆shell的种类

[root@localhost ~]# awk -F: '!shell[$7]++{print $7}' /etc/passwd
/bin/bash
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt

3)列出用户登陆shell的种类及个数,类似的可以统计web访问ip及访问次数

[root@localhost ~]# awk -F: '{shell[$7]++}END{for(i in shell){print i,shell[i]}}' /etc/passwd
/bin/sync
/bin/bash
/sbin/nologin
/sbin/halt
/sbin/shutdown
[root@localhost ~]# awk -F: '{shell[$7]++}END{for(i in shell){print i,shell[i]}}' /etc/passwd | sort -nr -k2
/sbin/nologin
/bin/bash
/sbin/shutdown
/sbin/halt
/bin/sync

4)统计nginx访问最多的ip

[root@ nginx]$ sudo awk '{ip[$1]++}END{for(i in ip) {print i,ip[i]}}' access.log | sort -nr -k2
146.145.196.170
111.7.10.21
124.25.17.151
47.92.114.243
11.7.100.24
111.7.100.22
111.7.100.20
106.14.217.247
47.92.126.167
11.7.100.23
111.7.10.19
111.7.100.25
111.7.10.18
111.7.100.27
111.7.10.26
80.82.70.187
83.143.86.62
80.82.78.104

awk命令的基本使用的更多相关文章

  1. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. awk命令详解

    搜索 纠正错误  添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...

  3. Linux安全基础:awk命令的使用

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  4. AWK命令学习

    使用方法 awk 'pattern {action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到 ...

  5. awk 命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  6. AWK命令的用法

    1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...

  7. [Linux] linux awk命令详解

    reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...

  8. awk命令简单介绍

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  9. Linux的awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  10. awk命令--update20150120

    简介 awk是一个强大的文本分析工具,把文件逐行读入,以空格为默认分隔符分割成field,切开的部分再进行各种分析处理. 模式和动作: 任何awk语句都是由模式和动作组成,模式部分决定动作语句何时触发 ...

随机推荐

  1. 3 saltstack高可用

    高可用 如果我们依赖于saltmaster管理服务器,那么就需要对saltmaster做好高可用.那么saltstack-master怎么做高可用呢? 可以参考官网1,官网2 机器配置: 我们有两台机 ...

  2. THINKPHP5 volist标签循环不能设置循环变量为$i

    在thinkphp5的volist标签中不要用$i作为id,举个简单例子 控制器这样写 模板这样写 结果是 这很令人费解啊.然后换一个循环变量看看 循环正常了,看来这个id这里设置循环变量的时候 不能 ...

  3. web.xml配置DispatcherServlet (***-servlert.xml)

    1. org.springframework.web.servlet.DispatcherServlet 所在jar包: <dependency> <groupId>org.s ...

  4. k8s(1)-使用kubeadm安装Kubernetes

    安装前准备 1. 一台或多台主机,这里准备三台机器 角色 IP Hostname 配置(最低) 操作系统版本 主节点 192.168.0.10 master 2核2G CentOS7.6.1810 工 ...

  5. Linux(Ubuntu)使用 sudo apt-get install 命令安装软件的目录在哪?(已解决)

    Linux(Ubuntu)使用   sudo apt-get install  命令安装软件的目录在哪? bin文件路径: /usr/bin 库文件路径: /usr/lib/  其它的图标啊什么的路径 ...

  6. Hbase学习之windows单机版搭建

    1. 下载hadoop-common-2.2.0-bin-master   hbase-1.0.2  并解压 2. 配置 修改 三个个环境变量 2.1 JAVA_HOME(如果没有配置请先配置 确保电 ...

  7. E - TOYS

    来源 poj 2318 Calculate the number of toys that land in each bin of a partitioned toy box. Mom and dad ...

  8. A - Wall

    Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the ...

  9. C - Monthly Expense

    Farmer John is an astounding accounting wizard and has realized he might run out of money to run the ...

  10. 用nodejs搭建一个简单的服务监听程序

    作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还 ...