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

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命令是一种分析和处理文本文件的编程工具。它的功能非常强大&#xff0c;是Linux/Unix系统中最常用的过滤工具。 awk内建变量&#xff1a; NF 整个数据行(即$0)拥有的字段总数 NR 当前awk所处理的数据行的编号 $0 当前awk所处理的数据行 $1 数据行的第1个字段 $2 数…...

react动态路由组件的封装

react动态路由组件的封装 我这篇比较全面 首先下载包 npm i react-router-dom5 这里为什么要用5的版本为啥不用最新的&#xff0c;原因在于老版本跟新版本写法不一样 老版本 import { HashRouter, Route, Switch, Redirect } from react-router-dom;render() {return (<Ha…...

Vue项目中引入高德地图步骤详解

高德地图API官网&#xff1a;高德开放平台 | 高德地图API。 目录 一、案例效果 二、开发准备 1. 注册高德开放平台账号 2. 创建应用添加 key 值 三、项目中使用地图组件 1. npm 获取高德地图 API 2.在项目中新建 MapContainer.vue 文件&#xff0c;用作地图组件。 3.在…...

软件测试用例篇(2)

功能测试界面测试兼容性测试安全测试易用性测试性能测试 针对有需求的案例来设计测试用例:邮箱注册&#xff0c;部分测试用例 https://zay1xofb7z6.feishu.cn/mindnotes/bmncnKD5Ak6GSZl3PRlWDgF9z3g#mindmap 一)等价类: 场景需求:姓名长度是6-200位&#xff0c;那么如何进行设…...

leetcode题解-27. Remove Element

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…...

【fly-iot飞凡物联】(4):在linux系统上搭建arduino环境,可以使用离线包,导入到arduino上即可。

目录前言1&#xff0c;关于2&#xff0c;然后就可以找到ESP32&#xff0c;ESP8266的主版3&#xff0c;方法2&#xff0c;github下载&#xff0c;然后手动添加到ide中吧4&#xff0c;总结前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未…...

java实例解析类图中【关联、组合和聚合】的区别

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 聚合Composition聚合与组合的区别关联是两个独立类之间的关系,它通过它们的对象建立关联。关联可以是一对一、一对多、多对一、多对多。在面向对象的编程中,一个对象与另一个对象通信以使用该对象提供的功能和服…...

基于m-p条件查询代码生成

目录 起因 演示 使用 0.自定义注解 1.定义一个dto的条件查询类 2.调用主程序 效果图 小结 代码 注解 Dto类 完整代码 起因 最近两天一直写后台管理统计的增删改查(很少写增删改查&#xff0c;所以不是很熟练)&#xff0c;几乎每个表都要涉及到条件查询的业务&#xf…...

【LeetCode】带环链表两道题

第一题&#xff1a;环形链表 问题介绍 给你一个链表的头节点head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪next指针再次到达&#xff0c;则链表中存在环。为了表示给定链表中的环&#xff0c;评测系统内部使用整数pos 来表示链表…...

CSS奇思妙想之-利用CSS裁剪(clip-path)完成各种图形

在日常开发当中&#xff0c;如果想要开发多边形&#xff0c;一般都需要多个盒子或者伪元素的帮助&#xff0c;有没有一直办法能只使用一个盒子实现呢&#xff1f; 有的&#xff1a;css裁剪 clip-path介绍 css裁剪&#xff08;clip-path&#xff09;这个属性平时率非常低。但是…...

力扣每日一题刷题总结:哈希表篇

剑指 Offer II 033.变位词组 Medium 哈希表 变位词 2023/3/3 给定一个字符串数组 strs &#xff0c;将 变位词 组合在一起。 可以按任意顺序返回结果列表。 注意&#xff1a;若两个字符串中每个字符出现的次数都相同&#xff0c;则称它们互为变位词。 示例&#xff1a; 示例 1:…...

【Redis】redis大key和大value的危害,如何处理?

前序 还记得上次和同事一起去面试候选人时&#xff0c;同事提了一个问题&#xff1a;Redis的大key有什么危害&#xff1f;当时候选人主要作答的角度是一个key的value较大时的情况&#xff0c;比如&#xff1a; 内存不均&#xff1a;单value较大时&#xff0c;可能会导致节点之…...

Spring Boot:实现MyBatis动态创建表

在有些应用场景中&#xff0c;我们会有需要动态创建和操作表的需求。 比如因为单表数据存储量太大而采取分表存储的情况&#xff0c;又或者是按日期生成日志表存储系统日志等等。这个时候就需要我们动态的生成和操作数据库表了。 而我们都知道&#xff0c;以往我们使用MyBati…...

SpringBoot+Seata在多数据源和feign中的简单使用

SpringBootSeata简单使用 目录seata执行过程安装seata下载seata使用自定义配置文件,NACOS为注册中心结合springboot实现AT模式1.多数据源引入依赖bootstrap.yml配置在使用的方法上用GlobalTransactional注解调用接口正常时调用接口报错时回滚2.配合feignseata优缺点seata执行过…...

计算机网络中的原码、反码、补码

写在前面 原码、反码、补码是计算机组成原理中的概念&#xff0c;是计算机网络的基础知识之一。这些概念是为了处理二进制数的符号位而引入的&#xff0c;常用于计算机中的整数运算&#xff0c;也常用于数据存储和传输等领域。因此&#xff0c;了解和掌握这些概念对于理解计算机…...

七、Bean的实例化方式

Spring为Bean提供了多种实例化方式&#xff0c;通常包括4种方式。&#xff08;也就是说在Spring中为Bean对象的创建准备了多种方案&#xff0c;目的是&#xff1a;更加灵活&#xff09; 第一种&#xff1a;通过构造方法实例化第二种&#xff1a;通过简单工厂模式实例化第三种&…...

Windows程序员学习Linux环境下VI(VIM)编辑器的使用方法

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows程序员如何学习Linux环境知识。由于很多程序在Windows环境下开发好后&#xff0c;还要部署到Linux服务器上去&#xff0c;所以作为Windows程序员有必要学习Linux环境的知识。VI…...

react入门篇

react入门篇前言一、目标二、项目环境三、实现过程&#xff08;干货满满&#x1f4a5;&#x1f4a5;&#x1f4a5;&#xff09;1.创建react项目2.arco design UI库3.路由模块化4. 状态管理zustand5. axios6. 路由守卫前言 提示&#xff1a;这里可以添加本文要记录的大概内容&a…...

阿赵的MaxScript学习笔记分享九《可编辑多面体的操作》

大家好&#xff0c;我是阿赵。这是MaxScript学习笔记分享的第九篇&#xff0c;可编辑多面体的操作。不知不觉写了这么多篇了&#xff0c;应该还有几篇就写完了。自己给自己加一下油。 在3DsMax里面如果需要建模&#xff0c;一般使用到的塌陷方式有3种&#xff0c;可编辑的网格、…...

【Redis场景5】集群秒杀优化-分布式锁

集群环境下的秒杀问题 前序 【Redis场景1】用户登录注册 【Redis场景2】缓存更新策略(双写一致) 【Redis场景3】缓存穿透、击穿问题 【Redis场景拓展】秒杀问题-全局唯一ID生成策略 【Redis场景4】单机环境下秒杀问题 在单机环境下的并发问题&#xff0c;我们可以使用相关…...

Phi-3-mini-4k-instruct-gguf实操手册:短问答/改写/摘要三大高频场景落地

Phi-3-mini-4k-instruct-gguf实操手册&#xff1a;短问答/改写/摘要三大高频场景落地 1. 模型简介与核心能力 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型&#xff0c;基于Phi-3系列优化而来。这个GGUF版本特别适合处理短文本任务&#xff0c;具有以下特点&a…...

高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析

高效一键构建&#xff1a;DoL-Lyra整合包的智能自动化构建系统解析 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity游戏的美化整合包配置而烦恼吗&#xff1f;您是否曾因手…...

驯服中点电位:I型NPC三电平逆变器离网系统建模与动态平衡策略

1. I型NPC三电平逆变器的中点电位难题 搞电力电子的兄弟们都知道&#xff0c;中点钳位型&#xff08;NPC&#xff09;三电平逆变器有个让人又爱又恨的特点——中点电位漂移。这就像你骑自行车时突然发现车把不听使唤&#xff0c;明明直线行驶却总往一边偏。在离网系统中&#x…...

解决Android 12 NFC功能失效:PendingIntent.FLAG_MUTABLE的正确用法

Android 12 NFC开发实战&#xff1a;PendingIntent可变性标志的深度解析 在移动支付和门禁系统逐渐普及的今天&#xff0c;NFC技术已经成为现代智能手机不可或缺的功能之一。然而&#xff0c;随着Android系统的版本迭代&#xff0c;开发者们不得不面对各种兼容性挑战。特别是在…...

Umi-OCR技术解密:离线文字识别的3大创新与全行业实践指南

Umi-OCR技术解密&#xff1a;离线文字识别的3大创新与全行业实践指南 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/G…...

Qwen3.5-2B图文对话实战:教育场景中学生作业图题智能解析案例

Qwen3.5-2B图文对话实战&#xff1a;教育场景中学生作业图题智能解析案例 1. 引言&#xff1a;教育场景中的AI助手需求 想象一下这样的场景&#xff1a;晚上10点&#xff0c;孩子拿着数学作业来问问题&#xff0c;题目是一张手绘的几何图形。家长可能已经忘记了几十年前学过的…...

[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上的部署&#xff0c;准备大展拳脚时&#xff0c;却发现git clone和git push命令频频报错&#xff0c;这种挫败感我深有体会。本文将带你系统排查四个关键环节&am…...

筑牢数据安全底座!百度智能云数据库GaiaDB分布式版通过『国密认证』

近日&#xff0c;百度智能云自研的关系型数据库GaiaDB分布式版获得由国家密码管理局商用密码检测认证中心颁发的《商用密码产品认证证书》&#xff0c;通过GM/T 0028《密码模块安全技术要求》安全等级第二级认证。这一认证标志着GaiaDB分布式版密码模块在密码安全设计、密钥管理…...

单片机电源电路设计:从3.3V到5V系统详解

1. 单片机电源电路设计基础 作为一名电子工程师&#xff0c;我深知电源电路设计在单片机系统中的重要性。电源就像人体的心脏&#xff0c;为整个系统提供稳定可靠的能量供应。在多年的项目实践中&#xff0c;我发现很多初学者往往忽视了电源设计的重要性&#xff0c;导致系统不…...