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

文本三剑客之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 nineten
[root@localhost opt]# awk 'NR==2;NR==4{print}' awk.txt      #打印2和4行
four  five   sixten

取第三行的第三列:

[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   sixten

奇数行:

[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%
​

相关文章:

文本三剑客之awk:

文本三剑客awk&#xff1a; grep 查 sed 增删改查 主要&#xff1a;增改 awk 按行取列 awk awk默认的分隔符&#xff1a;空格&#xff0c;tab键&#xff0c;多个空格自动压缩为一个。 awk的工作原理&#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&#xff0c;然…...

SpringSecurity-授权示例

用户基于权限进行授权 定义用户与权限 authorities()。 package com.cms.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.userdetails.User; import…...

选哪个短剧系统源码好:全面评估与决策指南

在短剧内容创作和分享日益流行的今天&#xff0c;选择合适的短剧系统源码对于构建一个成功的短剧平台至关重要。短剧系统源码不仅关系到平台的稳定性和用户体验&#xff0c;还直接影响到内容创作者和观众的互动质量。本文将提供一份全面的评估指南&#xff0c;帮助您在众多短剧…...

AI时代的软件工程:挑战与改变

人工智能&#xff08;AI&#xff09;正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一&#xff0c;软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程&#xff08;Software Engineering&#xff09;是关于如何系统化、规范化地…...

Zuul介绍

Zuul 是 Netflix 开源的一个云平台网络层代理&#xff0c;它主要用于路由、负载均衡、中间件通信和动态路由。Zuul 本质上是一个基于 JVM 的网关&#xff0c;它提供了以下功能&#xff1a; 1.路由&#xff1a;Zuul 允许客户端和服务器之间的所有入站和出站请求通过一个中心化的…...

7-1作业

1.实验目的&#xff1a;完成字符收发 led.h #ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC,GPIO,UART初始化 void init();//字符数据发送 void set_tt…...

ElasticSearch安装、配置详细步骤

一、环境及版本介绍 操作系统&#xff1a; Windows 10 软件版本&#xff1a; elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统环境&#xff0c;否则会产生软件与服务器环境不兼容的问题出现&#xff0c;ElasticSearch与环境支持…...

【Mybatis 与 Spring】事务相关汇总

之前分享的几篇文章可以一起看&#xff0c;形成一个体系 【Mybatis】一级缓存与二级缓存源码分析与自定义二级缓存 【Spring】Spring事务相关源码分析 【Mybatis】Mybatis数据源与事务源码分析 Spring与Mybaitis融合 SpringManagedTransaction&#xff1a; org.mybatis.spri…...

Leetcode 2065. 最大化一张图中的路径价值(DFS / 最短路)

Leetcode 2065. 最大化一张图中的路径价值 暴力DFS 容易想到&#xff0c;从0点出发DFS&#xff0c;期间维护已经走过的距离&#xff08;时间&#xff09;和途径点的权值之和&#xff0c;若访问到0点则更新答案&#xff0c;若下一步的距离与已走过的距离和超出了maxTime&#…...

SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

CVPR2024 香港理工大学&OPPO&bytedancehttps://github.com/cswry/SeeSR?tabreadme-ov-file#-licensehttps://arxiv.org/pdf/2311.16518#page5.80 问题引入 因为有些LR退化情况比较严重&#xff0c;所以超分之后的结果会出现语义的不一致的情况&#xff0c;所以本文训…...

七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3

前言 llama 3出来后&#xff0c;为了通过paper-review的数据集微调3&#xff0c;有以下各种方式 不用任何框架 工具 技术&#xff0c;直接微调原生的llama 3&#xff0c;毕竟也有8k长度了 效果不期望有多高&#xff0c;纯作为baseline通过PI&#xff0c;把llama 3的8K长度扩展…...

盘古5.0,靠什么去解最难的题?

文&#xff5c;周效敬 编&#xff5c;王一粟 当大模型的竞争开始拼落地&#xff0c;商业化在B端和C端都展开了自由生长。 在B端&#xff0c;借助云计算向千行万业扎根&#xff1b;在C端&#xff0c;通过软件App和智能终端快速迭代。 在华为&#xff0c;这家曾经以通信行业起…...

2.3章节Python中的数值类型

1.整型数值 2.浮点型数值 3.复数   Python中的数值类型清晰且丰富&#xff0c;主要分为以下几种类型&#xff0c;每种类型都有其特定的用途和特性。 一、整型数值 1.定义&#xff1a;整数类型用于表示整数值&#xff0c;如1、-5、100等。 2.特点&#xff1a; Python 3中的…...

每日Attention学习7——Frequency-Perception Module

模块出处 [link] [code] [ACM MM 23] Frequency Perception Network for Camouflaged Object Detection 模块名称 Frequency-Perception Module (FPM) 模块作用 获取频域信息&#xff0c;更好识别伪装对象 模块结构 模块代码 import torch import torch.nn as nn import to…...

【从0实现React18】 (五) 初探react mount流程 完成核心递归流程

更新流程的目的&#xff1a; 生成wip fiberNode树标记副作用flags 更新流程的步骤&#xff1a; 递&#xff1a;beginWork归&#xff1a;completeWork 在 上一节 &#xff0c;我们探讨了 React 应用在首次渲染或后续更新时的整体更新流程。在 Reconciler 工作流程中&#xff…...

0-30 VDC 稳压电源,电流控制 0.002-3 A

怎么运行的 首先&#xff0c;有一个次级绕组额定值为 24 V/3 A 的降压电源变压器&#xff0c;连接在电路输入点的引脚 1 和 2 上。&#xff08;电源输出的质量将直接影响与变压器的质量成正比&#xff09;。变压器次级绕组的交流电压经四个二极管D1-D4组成的电桥整流。桥输出端…...

HTML5+CSS3+JS小实例:图片九宫格

实例:图片九宫格 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1…...

湘潭大学软件工程数据库总结

文章目录 前言试卷结构给学弟学妹的一些参考自己的一些总结 前言 自己可能很早很早之前就准备复习了&#xff0c;但是感觉还是没有学到要点&#xff0c;主要还是没啥紧迫的压力&#xff0c;我们是三月份开学&#xff0c;那时候实验室有朋友挺认真开始学习数据库了&#xff0c;…...

Codeforces Testing Round 1 B. Right Triangles 题解 组合数学

Right Triangles 题目描述 You are given a n m nm nm field consisting only of periods (‘.’) and asterisks (‘*’). Your task is to count all right triangles with two sides parallel to the square sides, whose vertices are in the centers of ‘*’-cells. …...

怎样将word默认Microsoft Office,而不是WPS

设置——>应用——>默认应用——>选择"word"——>将doc和docx都选择Microsoft Word即可...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

Spring事务传播机制有哪些?

导语&#xff1a; Spring事务传播机制是后端面试中的必考知识点&#xff0c;特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发&#xff0c;全面剖析Spring事务传播机制&#xff0c;帮助你答得有…...