awk

awk

grep 查

sed 增删改查

awk 按行取列

awk默认分割符:

空格;tab键。多个空格压缩成一个空格

[root@test2 opt]# cat awk.txt 
1 2   3
[root@test2 opt]# awk '{print $3}' awk.txt 
3

awk的工作原理:

根据指令信息,逐行的读取文本内容,然后按照条件进行格式化输出。

awk选项:

-F 指定分隔符,默认就是空格键

-v 变量赋值

内置变量

$#:按行需要取出的第几个字段。

$0:打印所有,展示所有的文本内容(默认)

NR:需要处理的行号

NF:处理行的字段个数,$NF:当前行的最后一个字段

FS:FS和F是一样的,都是指定分隔符,-F:FS='.'

OFS:指定输出内容的分隔符

RS:行分隔符,可以根据RS的设置把文件内容切割成多个记录,也可以改变行的分隔符,默认\n,回车,换行

awk命令格式

awk -F '操作符 {动作}' 处理对象

-F 指定分隔符,如果是空格可以不加

动作:默认就是打印。

打印行号和内容    NR是行号   $0所有内容
[root@test2 opt]# awk '{print NR,$0}' awk.txt 
1 one two  three
2 four five six
3 seven  eight  nine
打印指定行
[root@test2 opt]# awk 'NR==3{print}' awk.txt 
seven  eight  nine

指定打印几行到几行 逗号隔开

[root@test2 opt]# awk 'NR==1,NR==3{print}' awk.txt 
one two  three
four five six
seven  eight  nine

指定打印几行和几行 分号隔开

[root@test2 opt]# awk 'NR==1;NR==3{print}' awk.txt 
one two  three
seven  eight  nine
打印奇偶行

偶数行

[root@test2 opt]# awk 'NR%2==0{print}' awk.txt 
four five six

奇数行

[root@test2 opt]# awk 'NR%2==1{print}' awk.txt 
one two  three
seven  eight  nine
如何使用指定分隔符

打印几行到几行 的第几列

[root@test2 opt]# awk -F: 'NR==1{print $3};NR==3{print $3}' /etc/passwd
0
1
2
使用awk文本过滤
[root@test2 opt]# awk '/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

以什么结尾过滤文本

[root@test2 opt]# awk '/bash$/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
wbl:x:1000:1000:wbl:/home/wbl:/bin/bash
wbl1:x:1001:1001::/home/wbl1:/bin/bash
wbl2:x:1002:1002::/home/wbl2:/bin/bash
aaa:x:1003:1003::/home/aaa:/bin/bash
bbb:x:1004:1004::/home/bbb:/bin/bash
ccc:x:1005:1005::/home/ccc:/bin/bash

BEGIN打印模式

格式

awk ‘BEGIN{...};{...};END{...}’ 文件

BEGIN{...}预先的条件,指定awk命令前的初始化操作

{...}处理条件,如何多初始值进行操作

END{...}处理完之后操作,一般都是打印。

区幂运算
[root@test2 opt]# awk 'BEGIN{print 10*2}' 
20
[root@test2 opt]# awk 'BEGIN{print 2**2}' 
4
[root@test2 opt]# awk 'BEGIN{print 2^3}' 
8
变量赋值 -v
[root@test2 opt]# sh test1.txt 
7
[root@test2 opt]# vim test1.txt
​
a=3
b=4
sum=$(awk -v a="$a" -v b="$b" 'BEGIN{print a+b}')
echo $sum

区幂运算

[root@test2 opt]# sh test1.txt 
输入一个数3
输入一个数4
81
[root@test2 opt]# vim test1.txt
read -p "输入一个数" a
read -p "输入一个数" b
sum=$(awk -v a="$a" -v b="$b" 'BEGIN{print a^b}')
echo $sum

指定分隔符

[root@test2 opt]# awk -v FS=":" -v OFS="==" '{print $1,$3}' /etc/passwd
​

RS以什么分隔符作为换行的标记

[root@test2 opt]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
​
[root@test2 opt]# echo $PATH | awk -v RS=":" '{print $1}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin

使用awk进行条件判断打印

[root@test2 opt]# awk -F: '$3>999{print $0}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
wbl:x:1000:1000:wbl:/home/wbl:/bin/bash

取反

[root@test2 opt]# awk -F: '!($3>5){print $0}' /etc/passwd
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
sync:x:5:0:sync:/sbin:/bin/sync

等于=是赋值 ==是查找

[root@test2 opt]# awk -F: '$3==999{print $0}' /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
awk的精确筛选

$n(>< ==)用于比较数值

$n-"字符串":该字段包含某个字符串

$n!~"字符串":该字段不包含某个字符串

$n=="字符串":该字段等于某个字符串

$n!=="字符串":该字段不等于某个字符串

$n-"字符串":

打印第七列包含bash这个字段的行,取得是行的第一列和最后一列,以:作为分隔符
[root@test2 opt]# awk -F: '$7~"bash" {print $1,$NF}' /etc/passwd 
root /bin/bash
wbl /bin/bash

取列不能范围操作
[root@test2 opt]# awk -F: '$7~"bash" {print ($1,$2,$3)}' /etc/passwd 
root x 0
wbl x 1000

$n== 是精确查找路径要完整

[root@test2 opt]# awk -F: '$7=="/bin/bash" {print ($1,$2,$3)}' /etc/passwd 
root x 0
wbl x 1000

/etc/passwd 第一列=wbl 且第七列=/bin/bsah

[root@test2 opt]# awk -F: '($1=="wbl")&&($NF=="/bin/bash") {print $1,$NF}' /etc/passwd
wbl /bin/bash
​
逻辑关系  &&是且  ||是或
[root@test2 opt]# awk -F: '($1=="ntp")||($NF=="/bin/bash") {print $1,$NF}' /etc/passwd
root /bin/bash
ntp /sbin/nologin
wbl /bin/bash

curl

curl是一个强大的命令

获取和发送数据

curl www.baidu.com

curl 192.168.65.10

获取网页内容并且输出

-o 将文件下载到指定的路径

-O 下载文件到本地

-x 发送post请求

-i 可以获取web软件的版本(服务端没有隐藏版本号)

awk 按行取列

awk 精确筛选

awk 运算符

awk如何取小数点几位及小数运算怎么取整

%.2f 取小数点后两位

[root@test2 opt]# sum=$(awk 'BEGIN{printf "%.2f", 1.222+2.222}')
[root@test2 opt]# echo $sum
3.44

%.F 取整

[root@test2 opt]# sum=$(awk 'BEGIN{printf "%.F", 1.222+2.222}')
[root@test2 opt]# echo $sum
3

面试题

awk的三元素表达

[root@test2 opt]# awk -F: '$3>999{print $0}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
wbl:x:1000:1000:wbl:/home/wbl:/bin/bash
[root@test2 opt]# awk -F: '{if ($3>999){print $0}}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
wbl:x:1000:1000:wbl:/home/wbl:/bin/bash
[root@test2 opt]# 

if else 语句

[root@test2 opt]# awk -F: '{num=($3>$4)?$3:$4;{print num,$0}}' /etc/passwd
num=($3>$4)?$3:$4;
?就是if
:就是else
;就是fi
if ($3>$4)
then
echo $3
else
echo $4
fi

取出文件里的主机名

[root@test2 opt]# cat test1.sh | awk -F '[ .]+' '{print $2}'
www
mail
linux
ftp
blog
[root@test2 opt]# cat test1.sh | awk '{print $2}' | awk -F. '{print $1}'
www
mail
linux
ftp
blog

统计/etc/下的文件的总大小?awk实现

[root@test2 opt]# ll /etc/ | awk  '/-/{print sum+=$5} END{print "文件总大小:"sum/1024"M"}'
​
文件总大小:1112.56M

作业

监控内存 、cpu、硬盘的根目录,超过80%提示用户,写成函数库的形式,每天上午的8.50执行一次脚本。

[root@test2 opt]# df -h | awk 'NR==2{print sum=$5} END{print "占用:"sum"%"}' | tr -d "%"
26
占用:26
[root@test2 opt]# top -b -n 1 | awk 'NR==3{print sum1=$2+$4} END{print "cpu占用总量:"sum1"%"}'
1.5
​
cpu占用总量:1.5%
[root@test2 opt]# free -m | awk 'NR==2{printf "%.2f", sum2=($3/$2)*100} END{print "内存占用量:"sum2"%
​
5.93内存占用量:5.93362%

调用

[root@test2 opt]# vim diaoyong.sh 
​
. /opt/test1.sh
a=`yingpan $sum1`
echo "$a"
​
b=`cpu $sum2`
echo "$b" 
​
c=`neicun $sum3`
echo "$c"

函数库

[root@test2 opt]# vim test1.sh 
​
yingpan () {
sum1=$(df -h | awk 'NR==2{print $5}' |tr -d "%")
if [[ $sum1 > 80 ]]
then
echo "警告!硬盘用量达到:$sum1"
else
echo "当前硬盘用量:$sum1%"
fi
}
​
cpu () {
sum2=$(top -b -n 1 | awk 'NR==3{print (sum2=$2+$4)}')
if [[ $sum2 > 80 ]]
then
echo "警告!cpu用量达到:$sum2"
else
echo "当前cpu用量:$sum2%"
fi
}
​
neicun () {
sum3=$(free -m | awk 'NR==2{printf "%.F", ($3/$2)*100}')
if [[ $sum3 > 80 ]]
then
echo "警告!内存占用量:$sum3"
else
echo "当前内存用量:$sum3%"
fi
}

执行

[root@test2 opt]# sh diaoyong.sh 
当前硬盘用量:26%
当前cpu用量:0%
当前内存用量:6%

以上是实践

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年数据、自动化与智能计算国际学术会议(ICDAIC 2024)

全称&#xff1a;2024年数据、自动化与智能计算国际学术会议&#xff08;ICDAIC 2024&#xff09; 会议网址:http://www.icdaic.com 会议地点: 厦门 投稿邮箱&#xff1a;icdaicsub-conf.com投稿标题&#xff1a;ArticleTEL。投稿时请在邮件正文备注&#xff1a;学生投稿&#…

测评:【ONLYOFFICE】版本更迭与AI加持下的最新ONLYOFFICE桌面编辑器8.1

你是否还在为没有一款合适的在线桌面编辑器而苦恼&#xff1f;你是否还在因为办公软件的选择过少而只能使用WPS或者office&#xff1f;随着办公需求的不断变化和发展&#xff0c;办公软件也在不断更新和改进。ONLYOFFICE 作为一款全功能办公软件&#xff0c;一直致力于为用户提…

android-aidl4

转&#xff1a;Android Aidl的使用_android aidl使用-CSDN博客 一.准备 Parcelable&#xff0c;可以理解成只是把car整个对象在aidl中进行传递&#xff0c;就理解成一个car的一个类吧&#xff0c;和其他类使用一样就行了&#xff0c;回调&#xff1a;把接口作为参数放在函数参…

场外期权交易流程以及参与方式是什么?

今天带你了解场外期权交易流程以及参与方式是什么&#xff1f;场外期权&#xff0c;是非标准化的期权合约&#xff0c;由买卖双方私下协商达成&#xff0c;灵活性较高。由于这种合约的条款可以根据双方的具体需求进行定制&#xff0c;因此它提供了比交易所交易的标准化期权更多…

多功能推拉力测试机可实现焊球推力测试

LB-8100A 多功能推拉力测试机广泛应于与 LED 封装测试、IC 半导体封 装测试、TO 封装测试、IGBT 功率模块封装测试、光电子元器件封装测试、汽 车领域、航天航空领域、军工产品测试、研究机构的测试及各类院校的测试 研究等应用。 多功能推拉力测试机设置主要结构&#xff1a;…

医疗器械3D全景展会在线漫游创造数字化时代的展览新篇章

在数字化浪潮的引领下&#xff0c;VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光&#xff0c;凭借优质的服务和丰富的经验&#xff0c;赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战&#xff0c;许…

【MySQL】数据类型和表的约束

1. 数据类型 分类数据类型解释数值类型BIT (M)位类型。M位数&#xff0c;默认为1范围1-64BOOL01表示真假TINYINT [UNSIGNED]8位整型SMALLINT [UNDIGNED]16位短整型INT [UNSIGNED]32位整型BIGINT [UNSIGNED]64位长整型小数类型FLOAT [ (M, D) ] [UNSIGNED]32位浮点类型&#xf…

【机器学习】机器学习重要方法——深度学习:理论、算法与实践

文章目录 引言第一章 深度学习的基本概念1.1 什么是深度学习1.2 深度学习的历史发展1.3 深度学习的关键组成部分 第二章 深度学习的核心算法2.1 反向传播算法2.2 卷积神经网络&#xff08;CNN&#xff09;2.3 循环神经网络&#xff08;RNN&#xff09; 第三章 深度学习的应用实…

群晖NAS部署VoceChat私人聊天系统并一键发布公网分享好友访问

文章目录 前言1. 拉取Vocechat2. 运行Vocechat3. 本地局域网访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问小结 7. 固定公网地址 前言 本文主要介绍如何在本地群晖NAS搭建一个自己的聊天服务Vocechat&#xff0c;并结合内网穿透工具实现使用任意浏览器远程访问进行智能聊天…

android adb常用命令集

1、系统调试 #adb shell&#xff1a;进入设备的 shell 命令行界面&#xff0c;可以在此执行各种 Linux 命令和特定的 Android 命令。 #adb shell dumpsys&#xff1a;提供关于系统服务和其状态的详细信息。 #adb logcat&#xff1a;实时查看设备的日志信息。可以使用过滤条件来…

浅析Vite本地构建原理

前言 随着Vue3的逐渐普及以及Vite的逐渐成熟&#xff0c;我们有必要来了解一下关于vite的本地构建原理。 对于webpack打包的核心流程是通过分析JS文件中引用关系&#xff0c;通过递归得到整个项目的依赖关系&#xff0c;并且对于非JS类型的资源&#xff0c;通过调用对应的loade…

使用 Reqable 在 MuMu 模拟器进行App抓包(https)

1、为什么要抓包&#xff1f; 用开发手机应用时&#xff0c;查看接口数据不能像在浏览器中可以直接通过network查看&#xff0c;只能借助抓包工具来抓包&#xff0c;还有一些线上应用我们也只能通过抓包来排查具体的问题。 2、抓包工具 实现抓包&#xff0c;需要一个抓包工具…

Java8使用Stream流实现List列表查询、统计、排序、分组、合并

Java8使用Stream流实现List列表查询、统计、排序以及分组 目录 一、查询方法1.1 forEach1.2 filter(T -> boolean)1.3 filterAny() 和 filterFirst()1.4 map(T -> R) 和 flatMap(T -> Stream)1.5 distinct()1.6 limit(long n) 和 skip(long n) 二、判断方法2.1 anyMa…

G7 - Semi-Supervised GAN 理论与实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 理论知识模型实现引用、配置参数初始化权重定义算法模型模型配置模型训练训练模型 模型效果总结与心得体会 理论知识 在条件GAN中&#xff0c;判别器只用…

轻松搞定数据可视化配色,这份指南助你一臂之力!

配色是数据可视化图表的主要因素。一组合适的配色可以表达数据的重点和趋势&#xff0c;而不良的配色会削弱可视化表达的有效性。在本文中&#xff0c;我将梳理数据可视化中使用的配色板类型&#xff0c;通过案例揭示数据可视化配色技巧&#xff0c;并介绍可生成配色板的插件&a…

Day 32:503. 下一个更大的元素Ⅱ

Leetcode 503. 下一个更大的元素Ⅱ 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它…

嵌入式实验---实验七 SPI通信实验

一、实验目的 1、掌握STM32F103SPI通信程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、使用STM32F103R6通过74HC595控制一位LID数码管&#xff0c;实现以下两个要求&#xff1a; &#xff08;1&#xff09;数码管从0到9循环显示&#xff1b; …

[leetcode]add-strings 字符串相加

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string addStrings(string num1, string num2) {int i num1.length() - 1, j num2.length() - 1, add 0;string ans "";while (i > 0 || j > 0 || add ! 0) {int x i > 0 ? num1[i…

[word] word 如何在文档中进行分栏排版? #媒体#其他#媒体

word 如何在文档中进行分栏排版&#xff1f; 目标效果 将唐代诗人李白的组诗作品《清平调词》进行分栏排版&#xff0c;共分三栏&#xff0c;每一首诗作为一栏&#xff0c;参考效果如下图。

基于STM32的智能健康监测手表

目录 引言环境准备智能健康监测手表系统基础代码实现&#xff1a;实现智能健康监测手表系统 4.1 数据采集模块4.2 数据处理与分析4.3 通信模块实现4.4 用户界面与数据可视化应用场景&#xff1a;健康监测与管理问题解决方案与优化收尾与总结 1. 引言 智能健康监测手表通过使…