Linux文本三剑客——awk

这里写自定义目录标题

  • 一.awk概述
    • 1.1awk介绍
    • 1.2工作原理
  • 二,awk——报告生成器
    • 按字段输出文本
    • 通过管道、双引号调用Shell命令

一.awk概述

1.1awk介绍

AWK是一个强大的文本分析工具。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作;数据可以来自标准输入也可以是管道或文件

1.2工作原理

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令
awk执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、“|表示"或”、"!“表示非” ;还可以进行简单的数学运算,如+、一、*、/、号、^分别表示加、减、乘、除、取余和乘方。

二,awk——报告生成器

awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容

awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容

awk包含几个特殊的内建变量(可直接用)如下所示
Linux文本三剑客——awk_第1张图片
按行输出文本
输出所有内容,等同于cat test.txt

awk ‘{print}’ test.txt

awk ‘{print $0}’ test.txt

输出第1~3行内容

awk ‘NR1,NR3{print}’ test.txt

输出第1~3行内容

awk ‘(NR>=1)&&(NR<=3){print}’ test.txt

输出第1行,第3行的内容

awk ‘NR1||NR3{print}’ test.txt

输出所有奇数行的内容

awk ‘(NR%2)==1{print}’ test.txt

输出所有偶数行的内容

awk ‘(NR%2)==0{print}’ test.txt

输出以root开头的行

awk ‘/^root/{print}’ /etc/passwd

输出以nologin结尾的行

awk ‘/nologin$/{print}’ /etc/passwd

统计以/bin/bash结尾的行数,等同于grep –c “/bin/bash$” /etc/passwd

awk ‘BEGIN {x=0};//bin/bash$/{x++};END {print x}’ /etc/passwd

统计以空行分隔的文本段落数

awk ‘BEGIN {RS=””} ;END{print NR}’ test.txt

按字段输出文本

输出每行中(以空格或制表符分隔)的第三个字段

awk ‘{print $3}’ test.txt

输出每行中第1,3个字段

awk ‘{print $1,$3}’ test.txt

输出密码为空的用户的shadow记录

awk -F ”:” ‘$2==””{print}’ /etc/shadow

输出密码为空的用户的shadow记录

awk ‘BEGIN {FS=”:”} ; $2==””{print}’ /etc/shadow

输出以冒号分隔且第7个字段中包含/bash的行的第一个字段

awk -F ”:” ‘$7~”/bash”{print $1}’ /etc/shadow

输出包含8个字段且第一个字段中包含nfs的行的第1,2个字段

awk ‘($1~”nfs”)&&(NF==8){print $1,$2}’ /etc/services

输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行

awk -F “:” ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’ /etc/passwd

打印文本文件的总行数

awk ‘END{print NR}’ test.txt

打印文本第二行第一列

sed -n “2, 1p” test.txt | awk ‘print $1’

输出文件最后一行

awk -F: ‘{print $NF}’ test.txt

输出文件的倒数第二列以","隔开

awk -F ‘,’ ‘END {print $2}’ test.txt

通过管道、双引号调用Shell命令

调用wc –l命令统计使用bash的用户的个数,等同于grep –c “bash$” /etc/passwd

awk -F: ‘/bash$/{print | “wc -l”}’ /etc/passwd

调用w命令,并用来统计在线用户数

awk ‘BEGIN {while (“w” | getline) n++ ; {print n-2}}’

调用hostname,并输出当前主机名

awk ‘BEGIN {“hostname” | getline ; print $0}’

查看网卡流量

ifconfig ens33 |awk ‘/RX p/{print $5 “字节”}’

你可能感兴趣的:(linux,云计算)