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

Linux 学习 awk 和sed 命令使用

      1. awk 命令

        awk 是一种处理文本文件的语言,是一个强大的文本分析工具。

        awk 通过提供编程语言的功能,如变量、数学运算、字符串处理等,使得对文本文件的分析和操作变得非常灵活和高效。

        之所以叫 awk 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

        这里我们有一个文本文件test.txt

        1 2 3 4 5 6
        test1 test2 test3 test4
        There are some words
        there are some numbers
        

打印整行:

# awk '{print}' test.txtroot@hcss-ecs-c2b8:/var/test# awk '{print}' test.txt
1 2 3 4 5 6
test1 test2 test3 test4
There are some words
there are some numbers

打印特定列:

# awk '{print $1, $2}' test.txt 
root@hcss-ecs-c2b8:/var/test# awk '{print $1, $2}' test.txt
1 2
test1 test2
There are
there are
root@hcss-ecs-c2b8:/var/test# awk '{print $3, $4}' test.txt
3 4
test3 test4
some words
some numbers

使用分隔符指定列:

# awk -F',' '{print $1, $2}' test.txt 

打印行数:

# awk '{print NR, $0}' file
root@hcss-ecs-c2b8:/var/test# awk '{print NR,$0}' test.txt 
1 1 2 3 4 5 6
2 test1 test2 test3 test4
3 There are some words
4 there are some numbers

打印行数满足条件的行:

awk '/pattern/ {print NR, $0}' file

计算列的总和:

# awk '{sum += $1} END {print sum}' file
# test.txt
1 2 3 4 5
2
3
4
5
6
test1 test2 test3 test4
There are some words
there are some numbersroot@hcss-ecs-c2b8:/var/test# vim test.txt 
# 只会计算数字类型,不能转化为数字的不影响求和
root@hcss-ecs-c2b8:/var/test# awk '{sum += $1} END {print sum}' test.txt 
21

打印最大值:

awk 'max < $1 {max = $1} END {print max}' file

格式化输出:

awk '{printf "%-10s %-10s\n", $1, $2}' file
  1. sed 命令

    Linux sed 命令是利用脚本来处理文本文件。

    sed 可依照脚本的指令来处理、编辑文本文件。

    Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

    语法

    sed [-hnV][-e<script>][-f<script文件>][文本文件]
    

    参数说明

    • -e

先创建一个sed的测试文本文件

root@hcss-ecs-c2b8:/var/test# vim sed_test.txt
root@hcss-ecs-c2b8:/var/test# cat sed_test.txt 
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
Google
Taobao
Runoob
Tesetfile
Wiki

添加文本

# 现在我们在第3行后添加一行文本"Newline"
root@hcss-ecs-c2b8:/var/test# sed  3a\NewLine  sed_test.txt 
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
NewLine
Linux test 
Google
Taobao
Runoob
Tesetfile
Wiki
# cat查看发现他并不会去修改原文件
root@hcss-ecs-c2b8:/var/test# cat sed_test.txt 
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
Google
Taobao
Runoob
Tesetfile
Wiki
# 我们去第三行前添加文本
root@hcss-ecs-c2b8:/var/test# sed  3i\NewLine  sed_test.txt 
HELLO LINUX!  
Linux is a free unix-type opterating system.  
NewLine
This is a linux testfile!  
Linux test 
Google
Taobao
Runoob
Tesetfile
Wiki

删除指定行数的文本

root@hcss-ecs-c2b8:/var/test# nl sed_test.txt 1	HELLO LINUX!  2	Linux is a free unix-type opterating system.  3	This is a linux testfile!  4	Linux test 5	Google6	Taobao7	Runoob8	Tesetfile9	Wikiroot@hcss-ecs-c2b8:/var/test# nl sed_test.txt | sed '2d'1	HELLO LINUX!  3	This is a linux testfile!  4	Linux test 5	Google6	Taobao7	Runoob8	Tesetfile9	Wikiroot@hcss-ecs-c2b8:/var/test# nl sed_test.txt | sed '2,6d'1	HELLO LINUX!  7	Runoob8	Tesetfile9	Wikiroot@hcss-ecs-c2b8:/var/test# nl sed_test.txt | sed '6d'1	HELLO LINUX!  2	Linux is a free unix-type opterating system.  3	This is a linux testfile!  4	Linux test 5	Google7	Runoob8	Tesetfile9	Wiki

替换文本

root@hcss-ecs-c2b8:/var/test# cat sed_test.txt 
#原文本
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
Google
Taobao
Runoob
Tesetfile
Wiki
# 替换后的文本
root@hcss-ecs-c2b8:/var/test# sed -e 's/LINUX/UNIX/g' sed_test.txt 
HELLO UNIX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
Google
Taobao
Runoob
Tesetfile
Wikiroot@hcss-ecs-c2b8:/var/test# sed -e 's/Taobao/JD/g' sed_test.txt 
HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test 
Google
JD
Runoob
Tesetfile
Wiki

思考:

  • grep 更适合单纯的查找或匹配文本
  • sed 更适合编辑匹配到的文本
  • awk 更适合格式化文本,对文本进行较复杂格式处理

简单编写一个shell脚本使用这两个命令

# alarm_handler.sh
#!/bin/bash# 监控系统资源使用情况,
threshold=$1  # 设置CPU使用率的阈值为threshold%。
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# 第二题中出现。grep、sed 和 awk 结合,从输出中提取并计算CPU空闲百分比。# 使用 bc 计算判断CPU使用率是否超过阈值。
if [[ $(echo "$cpu_usage > $threshold" | bc -l) -eq 1 ]]; thenecho "High CPU usage detected: $cpu_usage%"# 如果CPU使用率超过阈值,使用 mail 命令发送邮件给 admin@example.com。echo "High CPU Usage warning,Current CPU Usage: $cpu_usage%"
elseecho "CPU usage within normal range: $cpu_usage%"
fi
root@hcss-ecs-c2b8:/var/test# vim alarm_handler.sh 
root@hcss-ecs-c2b8:/var/test# chmod +x alarm_handler.sh 
root@hcss-ecs-c2b8:/var/test# ./alarm_handler.sh 20
CPU usage within normal range: 0%
root@hcss-ecs-c2b8:/var/test# ./alarm_handler.sh 30
CPU usage within normal range: 3.2%

没跑任何服务的原因,cpu几乎没有任何占用

http://www.lryc.cn/news/449831.html

相关文章:

  • 双端搭建个人博客
  • PHP 面向对象编程
  • 应急响应(1)-同事电脑
  • class 023 随机快速排序
  • 如何理解矩阵的复数特征值和特征向量?
  • 怎么查看网站是否被谷歌收录,查看网站是否被搜索引擎收录5个方法与步骤
  • Java工具--stream流
  • 什么是 JWT?它是如何工作的?
  • 微信小程序使用picker,数组怎么设置默认值
  • Springboot生成树工具类,可通过 id/code 编码生成 2.0版本
  • 17、CPU缓存架构详解高性能内存队列Disruptor实战
  • 算法训练营打卡Day18
  • 【leetcode】169.多数元素
  • MyBatis<foreach>标签的用法与实践
  • R语言Shiny包新手教程
  • [大象快讯]:PostgreSQL 17 重磅发布!
  • CHI trans--Home节点发起的操作
  • Rust和Go谁会更胜一筹
  • 记HttpURLConnection下载图片
  • 物联网实训室建设的必要性
  • 初识C语言(四)
  • 产品架构图:从概念到实践
  • smartctl 命令:查看硬盘健康状态
  • BBR 为什么没有替代 CUBIC 成为 Linux 内核缺省算法
  • Git忽略规则原理和.gitignore文件不生效的原因和解决办法
  • MySQL-数据库设计
  • Unity开发绘画板——04.笔刷大小调节
  • ./mnt/container_run_medium.sh
  • 数学建模研赛总结
  • 通信工程学习:什么是TCF技术控制设施