命令主要用法
  -格式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. Eclipse 中修改tomcat设置内存大小

    修改1: 在Eclipse中下面Servers双击Tomcat Server... 然后点击General InformAtion 下的Open launch configuration: 会弹出Ed ...

  2. 《objective-c基础教程》学习笔记(二)—— for循环的基本应用

    在上一篇博文中,我们介绍了如何开发前期的准备,以及简单的类型输出实例. 这篇博文,我要记录一个for循环输出的实例.并对此展开,改变成不同的三个小函数. int main(int argc, cons ...

  3. [Android] 基于 Linux 命令行构建 Android 应用(五):Ant 构建命令

    Android SDK 提供的 android 工具可以在项目根目录自动生成 Ant 构建文件 build.xml[1].进入项目根目录后,你可以使用以下 Ant 命令[2]. ant clean 清 ...

  4. ios 消除 字符串 首尾空格

    本文转载至 http://blog.csdn.net/reylen/article/details/8233353 (1)系统去首尾空格方法,使用NSString中的str = [str string ...

  5. WEB技术路线图

  6. 修改testtools框架,将测试结果显示用例注释名字

    在之前介绍的测试框架testtool中,发现测试结果中显示的都是测试用例的函数名,并没有将注释显示出来 这很不符合国人使用阿,没办法,自己动手来改改吧 首先,testtools是继承unittest的 ...

  7. JQ-总结

    -----------------------------------------------------------------------------jQuery----------------- ...

  8. 使用Entity Framework Core需要注意的一个全表查询问题

    .NET Core 迁移工作如火如荼,今天在使用 Entity Frameowork Core(又名EF Core)时写了下面这样的 LINQ 查询表达式: .Where(u => u.Id = ...

  9. hadoop历史版本,包括大名鼎鼎的hadoop 0.20.2

    http://archive.apache.org/dist/hadoop/core/ 大名鼎鼎的hadoop 0.20.2在此: http://archive.apache.org/dist/had ...

  10. Codeforces 1114E - Arithmetic Progression - [二分+随机数]

    题目链接:http://codeforces.com/problemset/problem/1114/E 题意: 交互题,有一个 $n$ 个整数的打乱顺序后的等差数列 $a[1 \sim n]$,保证 ...