文本三剑客之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: grep 查 sed 增删改查 主要:增改 awk 按行取列 awk awk默认的分隔符:空格,tab键,多个空格自动压缩为一个。 awk的工作原理:根据指令信息,逐行的读取文本内容,然…...
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…...
选哪个短剧系统源码好:全面评估与决策指南
在短剧内容创作和分享日益流行的今天,选择合适的短剧系统源码对于构建一个成功的短剧平台至关重要。短剧系统源码不仅关系到平台的稳定性和用户体验,还直接影响到内容创作者和观众的互动质量。本文将提供一份全面的评估指南,帮助您在众多短剧…...
AI时代的软件工程:挑战与改变
人工智能(AI)正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一,软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程(Software Engineering)是关于如何系统化、规范化地…...
Zuul介绍
Zuul 是 Netflix 开源的一个云平台网络层代理,它主要用于路由、负载均衡、中间件通信和动态路由。Zuul 本质上是一个基于 JVM 的网关,它提供了以下功能: 1.路由:Zuul 允许客户端和服务器之间的所有入站和出站请求通过一个中心化的…...
7-1作业
1.实验目的:完成字符收发 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安装、配置详细步骤
一、环境及版本介绍 操作系统: Windows 10 软件版本: elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统环境,否则会产生软件与服务器环境不兼容的问题出现,ElasticSearch与环境支持…...
【Mybatis 与 Spring】事务相关汇总
之前分享的几篇文章可以一起看,形成一个体系 【Mybatis】一级缓存与二级缓存源码分析与自定义二级缓存 【Spring】Spring事务相关源码分析 【Mybatis】Mybatis数据源与事务源码分析 Spring与Mybaitis融合 SpringManagedTransaction: org.mybatis.spri…...
Leetcode 2065. 最大化一张图中的路径价值(DFS / 最短路)
Leetcode 2065. 最大化一张图中的路径价值 暴力DFS 容易想到,从0点出发DFS,期间维护已经走过的距离(时间)和途径点的权值之和,若访问到0点则更新答案,若下一步的距离与已走过的距离和超出了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退化情况比较严重,所以超分之后的结果会出现语义的不一致的情况,所以本文训…...
七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3
前言 llama 3出来后,为了通过paper-review的数据集微调3,有以下各种方式 不用任何框架 工具 技术,直接微调原生的llama 3,毕竟也有8k长度了 效果不期望有多高,纯作为baseline通过PI,把llama 3的8K长度扩展…...
盘古5.0,靠什么去解最难的题?
文|周效敬 编|王一粟 当大模型的竞争开始拼落地,商业化在B端和C端都展开了自由生长。 在B端,借助云计算向千行万业扎根;在C端,通过软件App和智能终端快速迭代。 在华为,这家曾经以通信行业起…...
2.3章节Python中的数值类型
1.整型数值 2.浮点型数值 3.复数 Python中的数值类型清晰且丰富,主要分为以下几种类型,每种类型都有其特定的用途和特性。 一、整型数值 1.定义:整数类型用于表示整数值,如1、-5、100等。 2.特点: Python 3中的…...
每日Attention学习7——Frequency-Perception Module
模块出处 [link] [code] [ACM MM 23] Frequency Perception Network for Camouflaged Object Detection 模块名称 Frequency-Perception Module (FPM) 模块作用 获取频域信息,更好识别伪装对象 模块结构 模块代码 import torch import torch.nn as nn import to…...
【从0实现React18】 (五) 初探react mount流程 完成核心递归流程
更新流程的目的: 生成wip fiberNode树标记副作用flags 更新流程的步骤: 递:beginWork归:completeWork 在 上一节 ,我们探讨了 React 应用在首次渲染或后续更新时的整体更新流程。在 Reconciler 工作流程中ÿ…...
0-30 VDC 稳压电源,电流控制 0.002-3 A
怎么运行的 首先,有一个次级绕组额定值为 24 V/3 A 的降压电源变压器,连接在电路输入点的引脚 1 和 2 上。(电源输出的质量将直接影响与变压器的质量成正比)。变压器次级绕组的交流电压经四个二极管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…...
湘潭大学软件工程数据库总结
文章目录 前言试卷结构给学弟学妹的一些参考自己的一些总结 前言 自己可能很早很早之前就准备复习了,但是感觉还是没有学到要点,主要还是没啥紧迫的压力,我们是三月份开学,那时候实验室有朋友挺认真开始学习数据库了,…...
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即可...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
