shell脚本之awk命令(一)

简介: 1、工作原理2、AWK格式3、按行输入文本4、按字段输入文本5、通过管道符号,双引号调用shell命令

1、工作原理:


逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。


2、awk格式:

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …
awk -f 脚本文件 文件 1 文件 2 …


常见的内建变量:

FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’


3、按行输入文本:


awk '{print}' 1.txt                 #输出所有内容
awk '{print $0}' 1.txt          #输出所有内容


f1.png


awk 'NR==1,NR==3{print}' 1.txt  #输出第 1~3 行内容
awk '(NR>=1)&&(NR<=3){print}' 1.txt   #输出第 1~3 行内容


f2.png


awk 'NR==1||NR==3{print}' testfile2     #输出第1行、第3行内容


f3.png


awk '(NR%2)==1{print}' testfile2        #输出所有奇数行的内容
awk '(NR%2)==0{print}' testfile2        #输出所有偶数行的内容


f5.png


awk '/^root/{print}' /etc/passwd        #输出以 root 开头的行


f6.png


awk '/nologin$/{print}' /etc/passwd     #输出以 nologin 结尾的行


f7.png


awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd     #统计以/bin/bash 结尾的行数,等同于 grep -c "/bin/bash$"   /etc/passwd


f8.png


4、按字段输出文本:


awk -F ":" '{print $3}' /etc/passwd         #输出每行中(以空格或制表位分隔)的第3个字段


f9.png


awk -F ":" '{print $1,$3}' /etc/passwd      #输出每行中的第1、3个字段

f10.png


awk -F ":" '$3<5{print $1,$3}' /etc/passwd   #输出第3个字段的值小于5的第1、3个字段内容


f12.png


awk -F ":" '!($3<200){print}' /etc/passwd    #输出第3个字段的值不小于200的行


f13.png


awk 'BEGIN {FS=":"};{if($3>=200){print}}' /etc/passwd    #先处理完BEGIN的内容,再打印文本里面的内容


f15.png


awk -F ":" '{max=($3>$4)?$3:$4;{print max}}' /etc/passwd     #($3>$4)?$3:$4三元运算符,如果第3个字段的值大于第4个字段的值,则把第3个字段的值赋给max,否则第4个字段的值赋给max


f16.png

相关文章
|
15天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
2天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
23 3
|
3天前
|
存储 Shell 数据安全/隐私保护
ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
【4月更文挑战第11天】ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
23 7
|
5天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
24 0
|
6天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
7天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
23 1
|
10天前
|
分布式计算 Hadoop Shell
Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第4天】Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
24 5
|
11天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
141 0
|
11天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
134 0
|
15天前
|
弹性计算 Shell Linux
ecs服务器shell常用脚本练习(六)
【4月更文挑战第4天】shell代码训练(六)
108 0