linux三件客之awk全解

01.awk

awk:编程语言  GNU/awk
作用:1.取行2.取列3.模糊过滤4.数据统计,数据运算5.支持for循环 if判断 数组……6.格式化输出  sed后向引用
语法结构:awk '模式' file  # 模式是找谁 指定行 指定列 模糊查找  不加任何动作awk '模式(print)' file #模式+动作其他命令输出|  awk ‘模式’    
案例1awk按行查找
语法结构
awk 'NR==3' file #awk输出指定的行
awk内置变量
NR存放着文件中每行的行号
== 等于
>  大于第几行
<  小于第几行
>= 大于等于几行
<= 小于等于几行
!= 不等于
&& 并且
|| 或者
​
​
创造实验环境
[root@haha1 ~]# cat a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
​
​
只显示文件的第三行
[root@haha1 ~]# awk 'NR==3' a.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
​
为什么要加两个等号?
一个等号在系统中称为定义变量
​
只显示文件中小于3的行
[root@haha1 ~]# awk 'NR<3' a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
只显示文件中大于3的行
[root@haha1 ~]# awk 'NR>3' a.txt 
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
不取第三行
[root@haha1 ~]# awk 'NR!=3' a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
​
​
并且和或者
&& :并且
查找大于第二行  并且小于5的行
[root@haha1 ~]# awk 'NR>2&&NR<5' a.txt 
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
​
||:或者
案例:查找小于第2行,或者大于第5行
[root@haha1 ~]# awk 'NR<2||NR>5' a.txt 
1 root:x:0:0:root:/root:/bin/bash
​
​

案例2.模糊过滤文件内容

语法结构grep '' 文件sed -n '/内容/p' 文件awk '//,//' 文件awk '/内容/' 文件       
案例1.查找有root的行   
[root@haha1 ~]# awk '/root/' a.txt 
1 root:x:0:0:root:/root:/bin/bash
​
案例2.查找以1开头的行
[root@haha1 ~]# awk '/^1/' a.txt 
1 root:x:0:0:root:/root:/bin/bash
​
案例3.查找以n结尾的行
[root@haha1 ~]# awk '/n$/' a.txt 
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
​
案例4.查找有1,2,3的行
[root@haha1 ~]# awk '/[1-3]/' a.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin案例5.区间范围 工作中取时间范围较多
[root@haha1 ~]# awk '/^2/,/4/' a.txt 
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
​注意:三剑客支持扩展正则的写法grep -e 或者 egrepsed -rawk    什么都不加

案例3.awk取列

语法: awk '{print $n}' file
$0  awk的内置变量里面存放着每一行的内容
$1  表示第一列 默认以空格和tab键为分隔符 如果文件中没有空格和tab
$2  表示第二列
, 逗号 内置变量,表示空格
NF表示最后一列的列号
$NF 表示最后一列的内容注意: 所有的字符串在awk中被识别为变量,所以输出字符串必须加双引号案例1.显示文件的第一列
创造实验环境
[root@haha1 ~]# cat a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin显示文件的第一列
[root@haha1 ~]# awk '{print $1}' a.txt 
1
2
3
4
5显示文件的第二列
[root@haha1 ~]# awk '{print $2}' a.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
案例2.显示文件的第一列和第三列
[root@haha1 ~]# vim 3.txt~                                                       
~                                                       
~                                                       
~                                                       
~                                                       
~                                                       
~                                                       
~                                                       
"3.txt" [New] 14L, 219C written
[root@haha1 ~]# awk '{print $1,$3}' 3.txt [root@haha1 ~]# awk '{print $1"\t"$3}' 3.txt 案例。 先输出第3列,再输出第一列
[root@haha1 ~]# awk '{print $3"\t"$1}' 3.txt 取出最后一列的内容
[root@haha1 ~]# awk '{print NF}' 3.txt  #显示最后一列的行号
3
3
3
3
3
3
3
3
3
3
3
2
3
3
[root@haha1 ~]# awk '{print $NF}' 3.txt #显示最后一行的内容
100
106
110
102
88
86
110
102
106
86
100
90
88
100案例。取出磁盘中的第五列
[root@haha1 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.5M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sda3        18G  2.0G   16G  12% /
/dev/sda1       197M  110M   88M  56% /boot
tmpfs           199M     0  199M   0% /run/user/0
[root@haha1 ~]# df -h|awk  '{print $5}'
Use%
0%
0%
1%
0%
12%
56%
0%
案例。取出sda3的行的方法
[root@haha1 ~]# df -h|awk  '/sda3/'
/dev/sda3        18G  2.0G   16G  12% /
[root@haha1 ~]# df -h|grep  "/$"
/dev/sda3        18G  2.0G   16G  12% /
[root@haha1 ~]# df -h|grep  'sda3'
/dev/sda3        18G  2.0G   16G  12% /
[root@haha1 ~]# df -h|sed -n  '6p'
/dev/sda3        18G  2.0G   16G  12% /
[root@haha1 ~]# df -h|sed -n  '/sda3/p'
/dev/sda3        18G  2.0G   16G  12% /
[root@haha1 ~]# df -h|awk 'NR==6'
/dev/sda3        18G  2.0G   16G  12% /
案例。取出倒数第二列
[root@haha1 ~]# df -h|awk '{print NF-1}'
6
5
5
5
5
5
5
5
[root@haha1 ~]# df -h|awk '{print $(NF-1)}'
Mounted
0%
0%
1%
0%
12%
56%
0%
取出每行倒数第二列的内容
[root@haha1 ~]# awk '{print $(NF-1)}' 3.txt 
83
98
99
94
79
85
95
80
80
78
83
刘孟涛
75
最后一行为1-1=0 取$0  则输出最后一行全部内容 ($0表示全部)
[root@haha1 ~]# awk '{print $(NF-1)}' 3.txt 
83
98
99
94
79
85
95
80
80
78
83
刘孟涛
75
89
wewqeawk指定分隔符:默认以tab键或空格分隔
-F
awk -F:    #方法1
awk -F":"  #方法2案例。取出第一列
[root@haha1 ~]# awk -F: '{print $1}' a.txt 
1 root
2 bin
3 daemon
4 adm
5 lp取出最后一列
[root@haha1 ~]# awk -F: '{print $NF}' a.txt 
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin案例。指定多分隔符
[root@haha1 ~]# cat a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@haha1 ~]# awk -F":/" '{print $2}' a.txt 
root
bin
sbin
var/adm
var/spool/lpd   案例。取出两个root     +连续出现1次及1次以上的作为1个整体[root@haha1 ~]# cat a.txt |head -1 >4.txt
[root@haha1 ~]# cat 4.txt 
1 root:x:0:0:root:/root:/bin/bash
[root@haha1 ~]# awk -F "[:/]+" '{print $5,$6}' 4.txt
root root理解正则表达式+
[root@haha1 ~]# echo ---test-+haha1++::|awk -F "-" '{print $4}' #test在第四列
test
[root@haha1 ~]#  echo ---test-+haha1++::|awk -F "[-]+" '{print $2}' #前面三个---为一个整体
test
[root@haha1 ~]# echo ---test-+haha1++::|awk -F "[-+]" '{print $5}'[root@haha1 ~]# echo ---test-+haha1++::|awk -F "[-+]" '{print $4}'
test
[root@haha1 ~]# echo ---test-+haha1++::|awk -F "[-+]" '{print $6}'
haha1
[root@haha1 ~]# echo ---test-+haha1++::|awk -F "[-+]+" '{print $3}'
haha1

案例4.awk模式+动作

创建实验环境
[root@haha1 ~]# cat a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
​
[root@haha1 ~]# awk -F: 'NR==3{print $3 }' a.txt
2
​
​
案例2.取出用户名和最后一列
[root@haha1 ~]# awk -F "[ :]" '{print $2"\t" $NF  }' a.txt 
root    /bin/bash
bin /sbin/nologin
daemon  /sbin/nologin
adm /sbin/nologin
lp  /sbin/nologin
​
案例。取出/磁盘使用行的 第四列
指定行+动作
[root@haha1 ~]# df -h|awk 'NR==6'
/dev/sda3        18G  2.0G   16G  12% /
​
[root@haha1 ~]#  df -h|sed -n '/sda3/p'|awk '{print $4}' #第四列
16G
​
案例。取出dev相关的行的第一列和最后一列
[root@db01 ~]# df -h|awk '/sda3/,/sr0/'
/dev/sda3 18G 2.0G 16G 12% /
/dev/sda1 197M 110M 88M 56% /boot
/dev/sr0 4.4G 4.4G 0 100% /mnt
[root@db01 ~]# df -h|awk 'NR>5&&NR<9'
/dev/sda3 18G 2.0G 16G 12% /
/dev/sda1 197M 110M 88M 56% /boot
/dev/sr0 4.4G 4.4G 0 100% /mnt
[root@db01 ~]# df -h|awk '/sda3/,/sr0/{print $1,$NF}'
/dev/sda3 /
/dev/sda1 /boot
/dev/sr0 /mnt
[root@db01 ~]# df -h|awk 'NR>5&&NR<9{print $1,$NF}'
/dev/sda3 /
/dev/sda1 /boot
/dev/sr0 /mnt
​
扩展正则:字符串比对
[root@haha1 ~]# awk -F: '$NF=="/bin/bash"' a.txt 
1 root:x:0:0:root:/root:/bin/bash
​
查找以1开头的行
[root@haha1 ~]# awk -F: '/^1/' a.txt 
1 root:x:0:0:root:/root:/bin/bash
​
查找第二列以o开头的
[root@haha1 ~]# awk '$2 ~ /^o/' 3.txt 
许旺  haha1   100
杨明硕 haha1   88
查找第三列以1开头的
[root@haha1 ~]# awk '$3 ~ /^1/' 3.txt 
​
​
​
数字比较
[root@haha1 ~]# awk -F: '$3>0' a.txt 
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@haha1 ~]# cat a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@haha1 ~]# awk -F: '$3<2 ' a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
[root@haha1 ~]# awk -F: '$3<=2 ' a.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
​
成绩单统计
第三列(第二次成绩大于90的)
[root@haha1 ~]# awk '$3>90 ' 3.txt 
​
[root@haha1 ~]# awk '$3>90 ' 3.txt |wc -l    #统计人数
9
​
​
​
​
​
​

总结

1.awk取行
awk 'NR==3' file
NR==
NR!=
NR>=
NR<=
NR>
NR<
&&
||
2.awk模糊过滤
awk '/过滤的内容/' file
awk '//,//' file
支持正则
3.awk取列
awk '{print $1}' file
awk '{print $NF}' file 最后一列
4.awk指定分隔符
awk -F:
awk -F ":"
awk -F "[:/]+"
5.awk模式+动作
awk 'NR==6{print $3}'
awk '//{print $3}'
6.字符串比较
awk '$3=="root"' file
awk '$3!="root"' file 不等于
7.awk数值比较
awk '$3==0' file
awk '$3>90' file
awk '$3>80&&$3<90' file
|| 或者
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust并行计算库Rayon

rust并行计算库Rayon rust并行计算库Rayon什么是并行计算Rayon工作窃取算法第一个Rayon应用Rayon线程池Rayon任务调度Rayon并行迭代Rayon并行计算模式map-reduceRayon并行计算模式filter-mapRayon并行计算模式scanRayon并行策略Rayon并行策略静态分块Rayon并行策略动态分块Ray…

工作常用Linux命令记录

工作常用Linux命令记录 一、基础部分1、光标快速移动2、杀死指定端口3、查看磁盘占用4、CPU占用5、JVM命令 二、日志部分1、固定打印日志2、追加打印日志3、查询关键字周围4、浏览日志 一、基础部分 1、光标快速移动 mac下 移动到上一个单词&#xff1a;option➡️ 移动到下一…

混合现实(MR)开发工具

混合现实&#xff08;MR&#xff09;开发工具是一系列软件和框架&#xff0c;它们使得开发者能够创建和优化能够在虚拟与现实世界之间无缝交互的应用程序。以下是一些在MR领域内广泛使用的开发工具。 1.Microsoft Mixed Reality Toolkit (MRTK) MRTK是一个跨平台的工具包&…

【操作系统】FCFS、SJF、HRRN、RR、EDF、LLF调度算法及python实现代码

文章目录 一、先来先服务调度算法&#xff08;FCFS&#xff09; 二、短作业优先调度算法&#xff08;SJF&#xff09; 三、高响应比优先调度算法&#xff08;HRRN&#xff09; 四、轮转调度算法&#xff08;RR&#xff09; 五、最早截至时间优先算法&#xff08;EDF&#…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 &#xff08;1&#xff09;关于CPU &#xff08;2&#xff09;关于内…

Autodesk 3DS MAX 2025 (3Dmax2025)激活版

3ds Max 2025 是一款功能强大的3D建模、动画和渲染软件&#xff0c;广泛应用于建筑、游戏开发、影视制作等多个领域。在材质设定和描影、3D彩现以及动画和效果方面&#xff0c;3ds Max 2025也提供了丰富的增强功能&#xff0c;以满足用户在不同制作需求中的要求。 3ds Max 2025…

Docker——Dockerfile构建MySQL并初始化数据

目录 Dockerfile构建MySQL编写Dockerfile构建和运行Docker容器 Dockerfile构建MySQL 编写Dockerfile # 使用MySQL5.7镜像作为基础 FROM mysql:5.7# 复制初始化SQL脚本到容器中 COPY *.sql /docker-entrypoint-initdb.d/# 设置环境变量&#xff08;root密码&#xff09; ENV M…

几个好用的audio数字信号处理的开源地址marks(持续更新中)

这里写目录标题 Sound Open FirmwareMUSICDSPFFMPEGCMSIS DSP安卓oboe参考 Sound Open Firmware 根据此SOF Project documentation介绍&#xff0c;SOF项目是针对声音处理的开源固件平台&#xff0c; BSD 3-clause license协议, firmware部分使用者有比较大的自由度。 MUSICD…

Linux多进程通信(2)——POSIX信号量使用例程

1.POSIX信号量 1&#xff09;POSIX信号量和System V信号量区别 常用的是POSIX信号量&#xff0c;使用起来更加方便&#xff0c;而POSIX信号量分为有名信号量和无名信号量 POSIX信号量是多线程多进程安全的&#xff0c;而System V标准的信号量并不是&#xff0c;Posix通过sem_…

外包干了25天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Mysql中的 IFNULL 函数的详解

Mysql中的 IFNULL 函数的详解 概念 在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL&#xff0c;如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返回第二个参数的值。 语法 IFNULL(a, b)Demo 举例说明 创建表 create table student_one( sno varchar(20)…

R语言处理nc数据

一、nc介绍 NC文件&#xff0c;全称为"NetCDF"(Network Common Data Form)文件格式&#xff0c;是一种用于存储科学数据的通用、二进制文件格式&#xff0c;它由国际气象组织(International Organization for Standardization,简称ISO)开发&#xff0c;并作为其OMNI…

机器学习: 绪论(基础概念)

文章目录 一、机器学习做什么二、机器学习的基本术语2.1、数据相关2.1.1、数据集2.1.2、特征&#xff08;Feature&#xff09;2.1.3、样本空间&#xff08;Sample Space&#xff09; 2.2、任务相关2.2.1、分类2.2.2、回归2.2.3、聚类2.2.4、监督学习和无监督学习 三、机器学习思…

智乃想考一道鸽巢原理

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

VSCode 设置vue2模板

点击设置 > 用户代码片段 > 输入Vue &#xff08;打开vue.json&#xff09;> 将代码复制内 "Print to console": {"prefix": "<","body": ["<template>"," <div class$1></div>"…

Gauss到底是不是国产数据库

华为GaussDB数据库深度解析 引言 在数字化转型的浪潮中&#xff0c;数据成为企业最宝贵的资产之一。如何高效地管理和利用这些数据&#xff0c;成为企业面临的一大挑战。数据库作为数据存储和管理的核心系统&#xff0c;其性能、安全性、可用性和扩展性等特性直接影响到企业的…

wpf ContextMenu

ContextMenu上下文菜单 ContextMenu 在 WPF 中是一个非常有用的控件&#xff0c;它提供了一个在用户执行特定操作&#xff08;如右键点击&#xff09;时显示的菜单。ContextMenu 可以附加到几乎所有的 WPF 控件上&#xff0c;使得当用户与这些控件互动时&#xff0c;能够提供一…

苹果App上架指南

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

【随笔】Git -- 高级命令(中篇)(七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

文本直接生成2分钟视频,即将开源模型StreamingT2V

Picsart人工智能研究所、德克萨斯大学和SHI实验室的研究人员联合推出了StreamingT2V视频模型。通过文本就能直接生成2分钟、1分钟等不同时间&#xff0c;动作一致、连贯、没有卡顿的高质量视频。 虽然StreamingT2V在视频质量、多元化等还无法与Sora媲美&#xff0c;但在高速运…