文本三剑客之awk:

文本三剑客awk:

grep 查

sed 增删改查 主要:增改

awk 按行取列

awk

awk默认的分隔符:空格,tab键,多个空格自动压缩为一个。

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

awk的选项:

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

-v 变量赋值

内置变量:

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

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

NR 需要处理的行号

NF 处理行的字段个数,

$NF 当前行的最后一个字段

FS FS和F是一样的,都是指定分隔符,

-F: FS=":"

OFS 指定输出内容的分隔符

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

命令格式

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

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

动作:默认就是打印。

打印行号
[root@localhost opt]# awk '{print NR}' awk.txt 
1
2
3
4
[root@localhost opt]# awk '{print NR,$0}' awk.txt 
1 one two   three
2 four  five   six
3 seven eight   nine
4   ten
打印指定行
[root@localhost opt]# awk 'NR==3{print}' awk.txt 
seven eight nine
[root@localhost opt]# awk 'NR==2,NR==4{print}' awk.txt  #打印2-4行
four  five   six
seven eight nine
  ten
[root@localhost opt]# awk 'NR==2;NR==4{print}' awk.txt      #打印2和4行
four  five   six
  ten

取第三行的第三列:

[root@localhost opt]# cat awk.txt | awk 'NR==3{print $3}'
hpc
[root@localhost opt]# cat awk.txt | awk 'NR>=2{print $3}'
3
hpc

如何打印奇偶行

偶数行

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

奇数行:

[root@localhost opt]# awk 'NR%2==1{print}' awk.txt 
one two   three
seven eight nine
awk怎么使用文本过滤
[root@localhost opt]# awk '/root/{print}' /etc/passwdroot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost opt]# awk '/^root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost opt]# awk '/bash$/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
dn:x:1001:1001::/home/dn:/bin/bash

使用BEGIN模式打印

awk 'BEGIN{};{};END{}' 文件

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

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

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

[root@localhost opt]# awk 'BEGIN{x=0};{x++};END{print x}' awk.txt 
4 

取幂运算

[root@localhost opt]# awk 'BEGIN{print 3**3}'
27
-v 变量赋值
[root@localhost opt]# vim awk.sh
read -p "请输入一个数:" a
read -p "请输入$a的幂:" b
num=$(awk -v a="$a" -v b="$b" 'BEGIN{print a^b}')
echo $num
[root@localhost opt]# sh awk.sh 
请输入一个数:2
请输入2的幂:3
8
FS

用-v来进行赋值

[root@localhost opt]# awk -v FS=":" -v OFS -v OFS="==" '{print $1,$3}'  /etc/passwd
RS
[root@localhost opt]# echo $PATH | awk -v RS=":" '{print $1}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
awk的条件判断打印
[root@localhost opt]# awk -F: '$3>999{print $0}' /etc/passwd

第三列等于1000

[root@localhost opt]# awk -F: '$3==1000{print $0}' /etc/passwd
zhang:x:1000:1000:zhang:/home/zhang:/bin/bash
面试题:

awk的三元表达式:

if else语句

num=($3>$4)?$3:$4;

? if

: else

; fi

[root@localhost opt]# awk -F: '{num=($3>$4)?$3:$4;{print num,$0}}' /etc/passwd
if ($3>$4)
then
echo $3
else
echo $4
fi
awk的精确筛选:

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

$n~"字符串" 该字符包含某个字符串

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

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

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

$NF 代表最后一个字符串

打印第7列包含bash这个字段的行,取的是行的第一列和最后一列,以:作为分隔符。

[root@localhost opt]# awk -F: '$7~"bash" {print $1,$NF}' /etc/passwd
root /bin/bash
zhang /bin/bash
dn /bin/bash

== 是精确查找

~ 是模糊查找

逻辑关系

且和或:

/etc/passwd 第一列等于dn且第七列等于/bin/bash

[root@localhost opt]# awk -F: '($1=="dn")&&($NF=="/bin/bash") {print $1,$NF}' /etc/passwd
dn /bin/bash
[root@localhost opt]# awk -F: '($1=="ntp")||($NF=="/bin/bash") {print $1,$NF}' /etc/passwd
root /bin/bash
ntp /sbin/nologin
zhang /bin/bash
dn /bin/bash

curl是一个功能强大的命令

获取和发送数据

curl www.baidu.com

curl 192.168.60.20

获取网页内容并且输出

-0 下载文件到本地

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

-x 发送post请求

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

awk按行取列

awk的精确筛选

awk的运算符

练习

取小数点几位以及小数运算怎么取整数。

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

显示有空格有点做为分隔符的第二列

[root@localhost opt]# cat awk1.txt | awk -F'[ .]+' '{print $2}'
www
mail
ftp
linux
blog

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

[root@localhost opt]# ll /etc/ | awk '/^-/{print sum+=$5} END{print "文件的总大小是:"sum/1024"M"}'
1070299
文件的总大小是:1045.21M

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

[root@localhost opt]# vim hanshuku.sh
. /opt/head.sh
cpu=$(cpu)
neicun=$(neicun)
gengmulu=$(gengmulu)
echo $cpu
echo $neicun
echo $gengmulu
[root@localhost opt]# vim head.sh 
cpu () {
sum=$(top -b -n 1 | awk 'NR==3{printf "%.F",$2+$4}')
if [[ $sum -ge 80 ]]
then
echo "cpu使用超过80%了,已经有了$sum%。"
else
echo "cpu使用了$sum%"
fi
}
neicun () {
num=$(free -m | awk 'NR==2{printf "%.F",$3/$2*100}')
if [[ $num -ge 80 ]]
then
echo "内存使用超过80%了,已经有了$num%。"
else
echo "内存使用了$num%"
fi
}
gengmulu () {
c=$(df -h | awk 'NR==2{print $5}' | tr -d "%")
if [[ $c -ge 80 ]]
then
echo "硬盘使用超过80%了,已经有了$c%。"
else
echo "硬盘使用了$c%"
fi
}

运行结果:

[root@localhost opt]# sh hanshuku.sh 
cpu使用了0%
内存使用了12%
硬盘使用了27%

定时任务:

[root@localhost opt]# crontab -e
50 8 * * * sh /opt/hanshuku.sh
*/1 * * * * sh /opt/hanshuku.sh

定时任务的邮件:

[root@localhost opt]# vim /var/spool/mail/root
From root@localhost.localdomain  Mon Jun 24 16:16:01 2024
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
        id 6289060B73E3; Mon, 24 Jun 2024 16:16:01 +0800 (CST)
From: "(Cron Daemon)" <root@localhost.localdomain>
To: root@localhost.localdomain
Subject: Cron <root@localhost> sh /opt/hanshuku.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=261>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=zh_CN.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20240624081601.6289060B73E3@localhost.localdomain>
Date: Mon, 24 Jun 2024 16:16:01 +0800 (CST)
​
cpu使用了8%
内存使用了12%
硬盘使用了27%
​

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

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

相关文章

【C++】动态内存管理new和delete

文章目录 一、C的内存管理方式二、new和delete的用法1.操作内置类型2.操作自定义内置类型 三、new和delete的底层实现1.operator new和operator delete函数2.new和delete的实现原理 四、定位new表达式五、malloc/free和new/delete的区别 一、C的内存管理方式 之前在C语言的动态…

找不到vcomp140.dll怎么办,总结多种解决方法

​在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcomp140.dll丢失”。那么&#xff0c;vcomp140.dll是什么&#xff1f;它为什么会丢失&#xff1f;丢失后对电脑有什么影响&#xff1f;又该如何解决呢&#xff1f;本文将详细介绍vc…

leetcode 动态规划(基础版)单词拆分

题目&#xff1a; 题解&#xff1a; 一种可行的dp做法是基于完全背包问题&#xff0c;将s看成是一个背包&#xff0c;wordDict看作是物品&#xff0c;然后往s中放入物品判断最终是否可以变为给定的s即可。这道题和上一题都用到了在dp如何枚举连续子串和状态表示&#xff1a;枚…

一个 API 客户端和一份 TS 学习手册

第75期&#xff1a; Insomnia&#xff1a;超好看的 API 客户端 项目介绍&#xff1a; 一款适用于 GraphQL、REST、WebSockets 和 gRPC 的开源 API 客户端&#xff0c;颜值超高。 跨平台&#xff0c;支持 Mac、Windows 和 Linux。但不支持网页版&#xff0c;需要下载客户端。…

如何借助ai(文心一言)获取tushare的数据

1. 准备工作 确保已安装python &#xff0c;安装Tushare库 和文心一言的地址&#xff08;文心一言&#xff09;&#xff1a; 注册Tushare账号并获取Token&#xff1a;在Tushare官方网站注册账号&#xff0c;并获取个人Token。如下 tushare地址&#xff1a;&#xff08;点击即…

PD快充诱骗芯片工作原理,USB-C充电器出不来电压是什么原因?

一般使用Type-C接口的充电器基本上都是采用新的快充协议——PD快充协议&#xff0c;它不同于以前的USB-A的QC协议&#xff0c;这种协议&#xff0c;默认是没有快充电压输出的&#xff0c;VBUS和GND是0V。 所以&#xff0c;我们可以使用电阻的方式&#xff08;电流小&#xff09…

【Apache Doris】如何实现高并发点查?(原理+实践全析)

【Apache Doris】如何实现高并发点查&#xff1f;&#xff08;原理实践全析&#xff09; 一、背景说明二、原理介绍三、环境信息四、Jmeter初始化五、参数预调六、用例准备七、高并发实测八、影响因素九、总结 本文主要分享 Apache Doris 是如何实现高并发点查的&#xff0c;以…

突破SaaS产品运营困境:多渠道运营如何集中管理?

随着数字化时代的到来&#xff0c;SaaS&#xff08;软件即服务&#xff09;产品已成为企业日常运营不可或缺的工具。然而&#xff0c;在竞争激烈的市场环境下&#xff0c;SaaS产品运营越来越重视多渠道、多平台布局&#xff0c;以更广泛地触及潜在用户&#xff0c;然而&#xf…

《昇思25天学习打卡营第10天 | 昇思MindSporeFCN图像语义分割》

第10天 本节学习了FCN图像语义分割。全卷积网络是用于图像语义分割的一种框架。FCN是首个端到端&#xff08;end to end&#xff09;进行像素级&#xff08;pixel level&#xff09;预测的全卷积网络。FCN有两大明显的优点&#xff1a;一是可以接受任意大小的输入图像&#xff…

2024年跨境电商关键数据统计:市场规模将达到1.976万亿美元

预计2024年跨境电商消费市场规模将达到1.976万亿美元&#xff0c;占全球网上销售总额的31.2%。这一数据无疑展示了跨境电商市场的巨大潜力和迅猛增长趋势。 全球跨境电商的现状与未来 现状 2023年&#xff0c;全球跨境电商市场规模预计达到1.56万亿美元&#xff0c;占全球电子…

JAVA毕业设计145—基于Java+Springboot+vue+uniapp的驾校预约小程序(源代码+数据库+15000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvueuniapp的驾校预约小程序(源代码数据库15000字论文)145 一、系统介绍 本项目前后端分离&#xff0c;分为用户、教练、管理员三种角色 1、用户&#xff1a; …

PHP爬虫类的并发与多线程处理技巧

PHP爬虫类的并发与多线程处理技巧 引言&#xff1a; 随着互联网的快速发展&#xff0c;大量的数据信息存储在各种网站上&#xff0c;获取这些数据已经成为很多业务场景下的需求。而爬虫作为一种自动化获取网络信息的工具&#xff0c;被广泛应用于数据采集、搜索引擎、舆情分析…

unity-特效-雷达扫描效果

使用后处理方式制作 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class GlobalScanEffect : MonoBehaviour {public float startScanRange 0;public float maxScanRange 20;public float scanWidth 3;public flo…

洁盟超声波清洗机怎么样?横向测评希亦、洁盟、苏泊尔超声波清洗机谁是实力派

生活中大多数人戴眼镜&#xff0c;但是很多人都不注意眼镜的保养&#xff0c;导致镜片越来越模糊&#xff0c;从而引发多边的状况发生&#xff0c;比如长久戴模糊不清的眼镜&#xff0c;视力会受到影响随之下降。甚至是眼镜长期不清洗&#xff0c;上面的灰尘、细菌会影响眼部健…

极限竞速地平线4卡顿?这样做快速解决地平线4卡顿问题

极限竞速地平线4全新开放式剧情的设计让玩家的每一次行动都能推动游戏的进程。时间、天气和四季的变化&#xff0c;都将在极限竞速地平线4这里得到真实的呈现。玩家将有机会在壮丽的原生4K和HDR画质下&#xff0c;欣赏到英国那湖泊、山谷、城堡和无数美景&#xff0c;体验一段从…

使用 Rustup 管理 Rust 版本

文章目录 安装 Rustup配置镜像源安装 Rustup 安装 RustVS Code插件创建项目代码示例 Rust 官网&#xff1a;https://www.rust-lang.org/zh-CN/Crates 包管理&#xff1a;https://crates.io/Rust 程序设计语言&#xff1a;https://kaisery.github.io/trpl-zh-cn/通过例子学 Rust…

docker 搭建 AI大数据模型 --- 使用GPU

docker 搭建 AI大数据模型 — 使用GPU方式 搭建本地大模型&#xff0c;最简单的方法&#xff01;效果直逼GPT 服务器GPU系统HP580 G8P40Rocky9.2 安装程序AnythingLLM前端界面Open WebUIChatOllamaollama 一、AnythingLLM 介绍 AnythingLLM 是 Mintplex Labs Inc. 开发的一…

根据后端返回的省市区重新封装树结构(省市区通过children表示)

对比图&#xff08;截取部分&#xff09;&#xff1a; 注&#xff1a;先看分步&#xff0c;最后会附上完整代码&#xff08;如果有用&#xff0c;可以给小编点个赞吗&#xff1f;十分感谢&#xff09; 1.首先将前端返回相同的省份只展示一次 const obj {}; let keyList []r…

2024HVV最新POC/EXP,目前有8000+个POC/EXP

点击"仙网攻城狮”关注我们哦~ 不当想研发的渗透人不是好运维 让我们每天进步一点点 简介 都是网上收集的POC和EXP&#xff0c;最新收集时间是2024年五月&#xff0c;需要的自取。 表里没有的可以翻翻之前的文章&#xff0c;资源比较零散没有整合起来。 文件链接&#xff…

【系统架构设计师】五、计算机网络(概念|通信技术|网络技术)

目录 一、计算机网络概念 二、通信技术 三、网络技术 3.1 局域网(LAN) 3.1.1 局域网拓扑结构 3.1.2 局域网协议 3.2 无线局域网(WLAN) 3.3 广域网(WAN) 3.4 城域网&#xff08;MAN) 3.5 移动通信网 四、组网技术 4.1 OSI七层模型 4.1.1 交换机 4.1.2 路由器 4.2…