当前位置: 首页 > news >正文

“Shell“Awk命令

文章目录

  • 一.Awk
  • 二.Awk按行输出文本
  • 三.Awk按字段输出文本
  • 四.通过管道,双引号调用shell命令
  • 五.总结:

一.Awk

Awk的工作原理:

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

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

Awk的命令格式:

awk   选项    '模式或条件  [操作]'   文件1     文件2  ...
awk   -f      脚本文件       文件1    文件2     ...

Awk常见的内建变量(可直接用)如下所示:

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

二.Awk按行输出文本

1.输出所有内容:

awk '{print}' shicao1.txt           //输出所有内容
awk '{print $0}' shicao1.txt     //输出所有内容

在这里插入图片描述
2.输出第 4~6 行内容

awk 'NR==4,NR==6 {print $0}' shicao1.txt

在这里插入图片描述
3.输出第 4~6行内容(逻辑且)

awk 'NR>=4&&NR<=6 {print $0}' shicao1.txt

在这里插入图片描述
4.输出第4行、第6行内容(逻辑或)

awk 'NR==4||NR==6{print}' shicao1.txt

在这里插入图片描述
5.输出所有奇数/偶数行的内容:

awk '(NR%2)==1 {print $0}'  shicao1.txt    //输出所有奇数行的内容
awk '(NR%2)==0 {print $0}'  shicao1.txt    //输出所有偶数行的内容

在这里插入图片描述
5.输出所有偶数行并显示行号

awk '(NR%2)==0 {print NR,$0}'  shicao1.txt

在这里插入图片描述
6.输出以root开头的行

awk '/root/ {print $0}' /etc/passwd

在这里插入图片描述
7.不显示第十行内容

awk 'NR!=10{print $0}' shicao1.txt

在这里插入图片描述

8.输出以bash为结尾的:

awk '/bash$/ {print}' /etc/passwd

在这里插入图片描述
9.处理文件之前。处理文件所执行的操作,END操作

awk 'BEGIN {x=0}; /nologin$/ {x++;print x,$0}; END {print x}' /etc/passwd

在这里插入图片描述

三.Awk按字段输出文本

awk -F: ‘/^root/ {print $1}’ /etc/passwd               //输出每行中(以空格或制表位分隔)的第一个字段

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

awk -F: ‘/^root/ {print $1,$3}’ /etc/passwd         //输出每行中的第1,3个字段内容

awk -F: ‘/^root/ {print $1, 3 , 3, 3,NF}’ /etc/passwd     //输出每行中的第1,3,最后的字段内容
在这里插入图片描述

awk -F: ‘$3<5 {print $0}’ /etc/passwd                  //输出第3个字段的值小于5的内容

awk -F: ‘$3<5 {print $3, $1}’ /etc/passwd
在这里插入图片描述

awk -F: ‘!($3>10) {print $3,$1}’ /etc/passwd                 //输出第3个字段的值小于5的内容
在这里插入图片描述

awk ‘BEGIN {FS=“:”};{if($3>=1000){print}}’ /etc/passwd                   //先处理完BEGIN的内容,再打印文本里面的内容
在这里插入图片描述

awk -F “:” ‘{max=($3>=$4)?$3:$4;{print max}}’ /etc/passwd                       //($3>$4)?$3:$4;三元运算符,如果第3个字段的值大于等于第4个字段的值,则把第3个字段的值赋给max,否则第4个字段的值赋给max在这里插入图片描述

awk -F “:” ‘{print NR,$0}’ /etc/passwd                       &nbsp //输出每行内容和行号,每处理完一条记录,NR值加1在这里插入图片描述

awk -F “:” ‘$7~“/bash”{print $1}’ /etc/passwd                      //输出以冒号分隔且第7个字段中包含/bash的行的第1个字段在这里插入图片描述
awk -F “:” ‘($1~“root”)&&(NF==7){print $1,$2}’ /etc/passwd //输出第1个字段中包含root且有7个字段的行的第1、2个字段在这里插入图片描述
awk -F “:” ‘($7!=“/bin/bash”)&&($7!=“/sbin/nologin”){print}’ /etc/passwd //输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行在这里插入图片描述

四.通过管道,双引号调用shell命令

awk ‘{print NR}’ shicao1.txt                     //打印行号

awk ‘{print NR,$0}’ shicao1.txt
在这里插入图片描述
在这里插入图片描述

free -m | awk ‘/Mem:/ {print int($3/($3+$4)*100)“%”}’                   //查看当前内存使用百分比
在这里插入图片描述

awk ‘BEGIN {n=0 ; while (“w” | getline) n++ ; {print n-2}}’         //调用w命令,并用来统计在线用户数
在这里插入图片描述

CPU使用率:
在这里插入图片描述
查看当前cpu使用情况:top | awk ‘{print $0}’ (动态)
在这里插入图片描述
仅执行一次:top -b -n1
在这里插入图片描述

查看cpu使用率:
top -b -n1 | awk ‘/%Cpu/ {print $8}’
top -b -n1 | awk -F, ‘/%Cpu/ {print $4}’ | awk '{print $1}
top -b -n1 | awk -F, ‘/%Cpu/ {print $4}’ | awk ‘{print 100-$1"%"}’
在这里插入图片描述

查看根目录的使用率:

df | awk ‘{print $5}’

df | awk ‘$NF==“/”{print $5}’
在这里插入图片描述

cat /proc/uptime | awk -F, '{print $1}'  
date -d "$(cat /proc/uptime | awk -F. '{print $1}') second ago"    //开机时长  

在这里插入图片描述

cat shicao2.txt | sort | uniq -c                     //统计数据

方法1:cat shicao2.txt | awk '{a[$1]++}; END{for(i in a){print i,a[i]}} ’
方法2:cat shicao2.txt | sort | uniq -c
在这里插入图片描述
在这里插入图片描述

echo “A B C D” | awk ‘BEGIN{OFS=“,”}; {print $0}’
echo “A B C D” | awk ‘BEGIN{OFS=“,”}; {$1=$1; print $0}’

$1=$1 是用来激活$0的重新赋值,也就是说 字段$1…和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做
在这里插入图片描述

awk ‘BEGIN{a[0]=1; a[1]=2; a[2]=3; print a[1]}’
awk ‘BEGIN{a[0]=1; a[1]=2; a[2]=3; print a[0]}’
awk ‘BEGIN{a[0]=1; a[1]=2; a[2]=3; print a[2]}’
awk 'BEGIN{a[“abc”]=10; a[“def”]=20; a[“xyz”]=30; print a[“abc”]}
awk ‘BEGIN{a[“abc”]=10; a[“def”]=20; a[“xyz”]=30; print a[“xyz”]}’
awk ‘BEGIN{a[“abc”]=10; a[“def”]=20; a[“xyz”]=30; print a[“def”]}’
awk ‘BEGIN{a[0]=1; a[1]=2; a[2]=3; for(i in a){print i,a[i]}}’

PS1:BEGIN中的命令只执行一次
PS2:awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号
在这里插入图片描述

五.总结:

awk  选项 '条件 {操作}'awk  -F '分隔符'  'NR==X {print $n}'!= > >= < <= || &&'/字符串或正则/ {....}''Sn~"字符串" {...]'!~ == != > >= < <=awk  'BEGIN{...}; 条件{...}; END{...}'BEGIN{...};处理文件前的操作条件{...};按照条件处理文件行内突的操作END{...}  处理完文件所有行内容后的操作
http://www.lryc.cn/news/68116.html

相关文章:

  • 射频放大器的原理和作用(射频放大器和功率放大器的区别)
  • 揭秘KubeEdge边缘网络项目EdgeMesh:如何打造高速、安全、低延迟的互联网连接
  • Java设计模式 14-访问者模式
  • 【数据结构】线性表之链表
  • 微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台
  • Linux开发板安装Python环境
  • ChatGPT 聊天接口API 使用
  • 软件测试月薪2万,需要技术达到什么水平?
  • 从入门到进阶,Vue框架让Web开发更简单高效
  • 怎么缩小照片的kb,压缩照片kb的几种方法
  • 2. 注解Annotation
  • 【Leetcode -495.提莫攻击 -496.下一个更大的元素Ⅰ】
  • 肝一肝设计模式【八】-- 外观模式
  • Maven uber-jar(带依赖的打包插件)maven-shade-plugin
  • MySQL基础(二十八)索引优化与查询优化
  • 初步认识性能测试和完成一次完整的性能测试
  • 使用插件快速生成代码
  • FE_Vue学习笔记 插槽 slot
  • 单链表的成环问题
  • 横截面收益率
  • C++解析JSON JSONCPP库的使用
  • 不会Elasticsearch标准查询语句,如何分析数仓数据?
  • 获得GitHub Copilot并结合VS Code使用
  • Java基础-判断和循环
  • ESP32 FreeRTOS学习总结
  • uniapp打包ios保姆式教程【最新】
  • Thread线程学习(2) Linux线程的创建、终止和回收
  • linux-项目部署软件安装
  • Vue3-黑马(三)
  • 标准C库函数fprintf(),sprintf(),snprintf()的函数使用方法(往文件中写入数据,将变量的值转换成字符串输出)