awk简单实例(持续更新中)
一 概述
awk命令是一种分析和处理文本文件的编程工具。它的功能非常强大,是Linux/Unix系统中最常用的过滤工具。
awk内建变量:
NF 整个数据行(即$0)拥有的字段总数
NR 当前awk所处理的数据行的编号
$0 当前awk所处理的数据行
$1 数据行的第1个字段
$2 数据行的第2个字段
$NF 数据行的最后1个字段
注意:
和shell脚本中的变量不同,awk中的变量可以直接使用,不需要加上$符号
二 awk简单实例
2.1 查看服务器登入者的用户名和IP地址
last | awk '{print $1 "\t" $3}'
last -n 10 | awk '{print $1 "\t" $3}'
2.2 查找root用户的默认shell
方法一:
awk -F: '/^root/ {print $7}' /etc/passwd
执行结果为:/bin/bash
方法二:
awk -F: '{if ($1 == "root") print $7}' /etc/passwd
执行结果为:/bin/bash
上述两个命令的执行结果相同,其中:
-F:设置分隔符为冒号,默认分割符为空格或者[Tab]
‘/^root/ {print $7}’:通过正则表达式匹配以root开头的行,匹配成功后打印该行的第7列,即第7个字段
方法二中使用了条件语句,为了实际编程需要,awk命令中可以嵌入条件语句,条件语句的关键字是if
下图所示为条件语句的运算符:
> 大于
< 小于
>= 大于或等于
<= 小于或等于
== 等于
!= 不等于
2.3 从详细路径中提取文件名
echo "/root/dummy_app/tools/cloud/make_update_package.sh" | awk -F/ '{print $NF}'
-F:设置分隔符为正斜杠/,默认分割符为空格或者[Tab]
$NF:表示数据行的最后1个字段
上述命令的执行结果为:make_update_package.sh
2.4 计算某个目录下所有文件大小的总和
ls -l /boot | grep ^- | awk 'BEGIN{totalsize = 0;} {totalsize += $5;} END{print totalsize}'
从上述语句可以看出:awk中的变量可以直接使用,不需要加上$符号
ls -l /boot | grep ^-:表示只查找普通文件
ls -l /boot | grep ^d:表示只查找目录
BEGIN:表示awk在开始处理数据行之前,先执行BEGIN关键字指定的操作,即BEGIN关键字后面花括号里的内容,通常来说都是些打印标题信息、初始化变量等操作
END:表示awk在处理完所有数据行之后,再执行END关键字指定的操作,即END关键字后面花括号里的内容,通常来说都是些打印结束栏、输出最终结果等操作
注意:
无论是BEGIN还是END,它们都只会执行一次
2.5 解析配置文件-实例一
下图所示为配置文件详细内容:
index_file index_file
payload_type update_full
system_version v0.1
kernel_version v4.19.115
digest_type md5
private_pem /etc/menxian_private.pem
解析脚本如下所示:
#! /bin/sh
package_config=$1index_file=$(awk '/^index_file/ {print $2}' $package_config)
payload_type=$(awk '/^payload_type/ {print $2}' $package_config)
system_version=$(awk '/^system_version/ {print $2}' $package_config)
kernel_version=$(awk '/^kernel_version/ {print $2}' $package_config)
digest_type=$(awk '/^digest_type/ {print $2}' $package_config)
private_pem=$(awk '/^private_pem/ {print $2}' $package_config)
echo $index_file
echo $payload_type
echo $system_version
echo $kernel_version
echo $digest_type
echo $private_pem
运行脚本并且查看结果
./parse.sh package_config
index_file
update_full
v0.1
v4.19.115
md5
/etc/menxian_private.pem
我们抽取一行进行分析:
index_file=$(awk '/^index_file/ {print $2}' $package_config)
/^index_file/:表示匹配以index_file开头的行
/index_file$/:表示匹配以index_file结尾的行
$():将整个命令执行结果,赋值给变量
需要注意的是:$()会将多行的执行结果合并成一行,然后赋值给变量
咱们可以使用如下命令进行测试:
result=$(df -hT); echo $result;
2.6 解析配置文件-实例二
下图所示为配置文件详细内容:
[payload_type]
update_full[system_version]
v1.4.0[kernel_version]
v4.19.115[digest_type]
md5
解析脚本如下所示:
#! /bin/sh
configfile=$1payload_type=$(awk '/\[payload_type]/ {getline; print $1}' $configfile)
system_version=$(awk '/\[system_version]/ {getline; print $1}' $configfile)
kernel_version=$(awk '/\[kernel_version]/ {getline; print $1}' $configfile)
digest_type=$(awk '/\[digest_type]/ {getline; print $1}' $configfile)
echo $payload_type
echo $system_version
echo $kernel_version
echo $digest_type
运行脚本并且查看结果
./parse.sh payload_desc
update_full
v1.4.0
v4.19.115
md5
我们同样抽取一行进行分析
payload_type=$(awk '/\[payload_type]/ {getline; print $1}' $configfile)
/[payload_type]/:表示匹配包含[payload_type]的行,在awk中[符号需要使用\[进行转义,]符号就不需要
相关文章:
awk简单实例(持续更新中)
一 概述 awk命令是一种分析和处理文本文件的编程工具。它的功能非常强大,是Linux/Unix系统中最常用的过滤工具。 awk内建变量: NF 整个数据行(即$0)拥有的字段总数 NR 当前awk所处理的数据行的编号 $0 当前awk所处理的数据行 $1 数据行的第1个字段 $2 数…...
react动态路由组件的封装
react动态路由组件的封装 我这篇比较全面 首先下载包 npm i react-router-dom5 这里为什么要用5的版本为啥不用最新的,原因在于老版本跟新版本写法不一样 老版本 import { HashRouter, Route, Switch, Redirect } from react-router-dom;render() {return (<Ha…...
Vue项目中引入高德地图步骤详解
高德地图API官网:高德开放平台 | 高德地图API。 目录 一、案例效果 二、开发准备 1. 注册高德开放平台账号 2. 创建应用添加 key 值 三、项目中使用地图组件 1. npm 获取高德地图 API 2.在项目中新建 MapContainer.vue 文件,用作地图组件。 3.在…...
软件测试用例篇(2)
功能测试界面测试兼容性测试安全测试易用性测试性能测试 针对有需求的案例来设计测试用例:邮箱注册,部分测试用例 https://zay1xofb7z6.feishu.cn/mindnotes/bmncnKD5Ak6GSZl3PRlWDgF9z3g#mindmap 一)等价类: 场景需求:姓名长度是6-200位,那么如何进行设…...
leetcode题解-27. Remove Element
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…...
【fly-iot飞凡物联】(4):在linux系统上搭建arduino环境,可以使用离线包,导入到arduino上即可。
目录前言1,关于2,然后就可以找到ESP32,ESP8266的主版3,方法2,github下载,然后手动添加到ide中吧4,总结前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未…...
java实例解析类图中【关联、组合和聚合】的区别
总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 聚合Composition聚合与组合的区别关联是两个独立类之间的关系,它通过它们的对象建立关联。关联可以是一对一、一对多、多对一、多对多。在面向对象的编程中,一个对象与另一个对象通信以使用该对象提供的功能和服…...
基于m-p条件查询代码生成
目录 起因 演示 使用 0.自定义注解 1.定义一个dto的条件查询类 2.调用主程序 效果图 小结 代码 注解 Dto类 完整代码 起因 最近两天一直写后台管理统计的增删改查(很少写增删改查,所以不是很熟练),几乎每个表都要涉及到条件查询的业务…...
【LeetCode】带环链表两道题
第一题:环形链表 问题介绍 给你一个链表的头节点head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos 来表示链表…...
CSS奇思妙想之-利用CSS裁剪(clip-path)完成各种图形
在日常开发当中,如果想要开发多边形,一般都需要多个盒子或者伪元素的帮助,有没有一直办法能只使用一个盒子实现呢? 有的:css裁剪 clip-path介绍 css裁剪(clip-path)这个属性平时率非常低。但是…...
力扣每日一题刷题总结:哈希表篇
剑指 Offer II 033.变位词组 Medium 哈希表 变位词 2023/3/3 给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。 注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。 示例: 示例 1:…...
【Redis】redis大key和大value的危害,如何处理?
前序 还记得上次和同事一起去面试候选人时,同事提了一个问题:Redis的大key有什么危害?当时候选人主要作答的角度是一个key的value较大时的情况,比如: 内存不均:单value较大时,可能会导致节点之…...
Spring Boot:实现MyBatis动态创建表
在有些应用场景中,我们会有需要动态创建和操作表的需求。 比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等。这个时候就需要我们动态的生成和操作数据库表了。 而我们都知道,以往我们使用MyBati…...
SpringBoot+Seata在多数据源和feign中的简单使用
SpringBootSeata简单使用 目录seata执行过程安装seata下载seata使用自定义配置文件,NACOS为注册中心结合springboot实现AT模式1.多数据源引入依赖bootstrap.yml配置在使用的方法上用GlobalTransactional注解调用接口正常时调用接口报错时回滚2.配合feignseata优缺点seata执行过…...
计算机网络中的原码、反码、补码
写在前面 原码、反码、补码是计算机组成原理中的概念,是计算机网络的基础知识之一。这些概念是为了处理二进制数的符号位而引入的,常用于计算机中的整数运算,也常用于数据存储和传输等领域。因此,了解和掌握这些概念对于理解计算机…...
七、Bean的实例化方式
Spring为Bean提供了多种实例化方式,通常包括4种方式。(也就是说在Spring中为Bean对象的创建准备了多种方案,目的是:更加灵活) 第一种:通过构造方法实例化第二种:通过简单工厂模式实例化第三种&…...
Windows程序员学习Linux环境下VI(VIM)编辑器的使用方法
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows程序员如何学习Linux环境知识。由于很多程序在Windows环境下开发好后,还要部署到Linux服务器上去,所以作为Windows程序员有必要学习Linux环境的知识。VI…...
react入门篇
react入门篇前言一、目标二、项目环境三、实现过程(干货满满💥💥💥)1.创建react项目2.arco design UI库3.路由模块化4. 状态管理zustand5. axios6. 路由守卫前言 提示:这里可以添加本文要记录的大概内容&a…...
阿赵的MaxScript学习笔记分享九《可编辑多面体的操作》
大家好,我是阿赵。这是MaxScript学习笔记分享的第九篇,可编辑多面体的操作。不知不觉写了这么多篇了,应该还有几篇就写完了。自己给自己加一下油。 在3DsMax里面如果需要建模,一般使用到的塌陷方式有3种,可编辑的网格、…...
【Redis场景5】集群秒杀优化-分布式锁
集群环境下的秒杀问题 前序 【Redis场景1】用户登录注册 【Redis场景2】缓存更新策略(双写一致) 【Redis场景3】缓存穿透、击穿问题 【Redis场景拓展】秒杀问题-全局唯一ID生成策略 【Redis场景4】单机环境下秒杀问题 在单机环境下的并发问题,我们可以使用相关…...
Phi-3-mini-4k-instruct-gguf实操手册:短问答/改写/摘要三大高频场景落地
Phi-3-mini-4k-instruct-gguf实操手册:短问答/改写/摘要三大高频场景落地 1. 模型简介与核心能力 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型,基于Phi-3系列优化而来。这个GGUF版本特别适合处理短文本任务,具有以下特点&a…...
高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析
高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity游戏的美化整合包配置而烦恼吗?您是否曾因手…...
驯服中点电位:I型NPC三电平逆变器离网系统建模与动态平衡策略
1. I型NPC三电平逆变器的中点电位难题 搞电力电子的兄弟们都知道,中点钳位型(NPC)三电平逆变器有个让人又爱又恨的特点——中点电位漂移。这就像你骑自行车时突然发现车把不听使唤,明明直线行驶却总往一边偏。在离网系统中&#x…...
解决Android 12 NFC功能失效:PendingIntent.FLAG_MUTABLE的正确用法
Android 12 NFC开发实战:PendingIntent可变性标志的深度解析 在移动支付和门禁系统逐渐普及的今天,NFC技术已经成为现代智能手机不可或缺的功能之一。然而,随着Android系统的版本迭代,开发者们不得不面对各种兼容性挑战。特别是在…...
Umi-OCR技术解密:离线文字识别的3大创新与全行业实践指南
Umi-OCR技术解密:离线文字识别的3大创新与全行业实践指南 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/G…...
Qwen3.5-2B图文对话实战:教育场景中学生作业图题智能解析案例
Qwen3.5-2B图文对话实战:教育场景中学生作业图题智能解析案例 1. 引言:教育场景中的AI助手需求 想象一下这样的场景:晚上10点,孩子拿着数学作业来问问题,题目是一张手绘的几何图形。家长可能已经忘记了几十年前学过的…...
[Python3高阶编程] - 异步编程深度学习指南一: 基础知识( 源代码)
异步编程深度学习指南 原文: https://blog.csdn.net/andylin02/article/details/159649164?spm1001.2014.3001.5502 #!/home/admin/.pyenv/versions/3.9.12/bin/python # -*- coding: utf-8 -*-o import aiohttp import asyncio from asyncio import Semaphoreasync def fetc…...
GitLab中文版在Windows Docker部署后,解决‘git clone’和‘git push’失败的几个关键检查点
GitLab中文版Windows Docker部署后git clone和git push故障排查指南 当你终于完成了GitLab中文版在Windows Docker上的部署,准备大展拳脚时,却发现git clone和git push命令频频报错,这种挫败感我深有体会。本文将带你系统排查四个关键环节&am…...
筑牢数据安全底座!百度智能云数据库GaiaDB分布式版通过『国密认证』
近日,百度智能云自研的关系型数据库GaiaDB分布式版获得由国家密码管理局商用密码检测认证中心颁发的《商用密码产品认证证书》,通过GM/T 0028《密码模块安全技术要求》安全等级第二级认证。这一认证标志着GaiaDB分布式版密码模块在密码安全设计、密钥管理…...
单片机电源电路设计:从3.3V到5V系统详解
1. 单片机电源电路设计基础 作为一名电子工程师,我深知电源电路设计在单片机系统中的重要性。电源就像人体的心脏,为整个系统提供稳定可靠的能量供应。在多年的项目实践中,我发现很多初学者往往忽视了电源设计的重要性,导致系统不…...
