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

127、【OS】【Nuttx】【周边】效果呈现方案解析:比较浮点数(上)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

之前 blog
【OS】【Nuttx】【周边】效果呈现方案解析:测试命令
分析了测试命令和 if 表达式之间的联系,下面继续

回到这个比较点:

    # 如果找到了文件if [ -n "$file_mtime" ]; then# 使用 awk 比较浮点数if awk "BEGIN {exit !($file_mtime > $max_mtime)}"; thenmax_mtime=$file_mtimelatest_dir=$dirfifi

之前 blog 【OS】【Nuttx】【周边】效果呈现方案解析:find 格式化打印 说过, file_mtime 变量拿到的是一个 Unix 时间戳(即自 1970-01-01 00:00:00 UTC 起的秒数,浮点数形式),比如在终端输入

find -printf "%T@\n"

可以打印当前目录下创建的文件和目录的日期(以 Unix 时间戳形式打印出来)
在这里插入图片描述
可以看到,这些数据都是浮点数形式

然后由于要获取最新修改的文件,这就涉及到在 Bash 中比较浮点数,下面来分析下

比较浮点数

首先,先看下上篇 blog 【OS】【Nuttx】【周边】效果呈现方案解析:测试命令 介绍的 test 命令,终端输入

man test

查看 test 命令描述,可以看到
在这里插入图片描述
test 命令描述中,仅支持正数类型进行比较,是不支持浮点数比较的,如果强行想用 test 命令比较浮点数,比如在终端输入

test_var1=1.1
test_var2=1.2
test $test_var1 -lt $test_var2

可以看到 test 命令直接报错,提示要输入整数类型
在这里插入图片描述

ok,下面来看 awk 命令,先简单介绍下

首先,awk 命令是一个强大的文本处理工具,可以用来

  • 分析和提取文本内容
  • 处理结构化数据(按一定格式组织起来的数据文件),比如日志文件,CSV 表格等
  • 做简单的文本转换或计算

是 Unix 系统中三剑客之一(另外两个是 sed 和 grep),在 Shell 脚本中非常常用

awk 命名没啥特殊含义,只是三位创始人姓氏的首字母缩写:Alfred Aho,Peter Weinberger,Brian Kernighan,其中 Brian Kernighan 也是 C 语言经典书籍《The C Programming Language》的作者之一

其次,awk 不仅仅是一个命令行工具,实际上也是一种完整的编程语言:领域特定语言(Domain Specific Language,DSL),专门设计用来处理文本和数据,可以把 awk 看作是一种轻量级的数据处理语言,其融合了诸如

  • 模式匹配(类似 grep)
  • 自动处理输入和字段,比如逐行读取输入,自动按列分割等
  • 可以定义变量,支持循环结构,条件判断,函数等(像传统编程语言)
  • 内置函数(字符串、数学等)
  • 支持关联数组(类似字典,哈希表等数据结构)

ok,awk 内容很多,下面回到所用到的地方
在这里插入图片描述
这里 BEGIN { ... } 是 awk 的一个特殊模式(也叫 pattern ),表示在 awk 命令开始读取任何输入文件之前,先执行一次 { } 里的代码

终端输入

man awk

可以查看 awk 相关的手册文档,输入 /^\s*BEGIN 可以匹配查找到 BEGIN 相关的语法如下:
在这里插入图片描述
从描述中,可以看到 awk 的核心工作方式是:逐行读取输入,对每一行执行 pattern 匹配的 action,这里的 pattern 可以是表达式 expression,也可以是 BEGIN 或者 END 这样的关键字

BEIGIN
比如有时候不想处理文件内容,只想做一些初始化(比如设置变量),或者计算一个表达式(比如现在这种比较两个浮点数的场景),这时候用 BEGIN 就可以告诉 awk 命令:不用等待输入文件,现在就执行花括号 { } 里的代码

对应的 END { ... }:所有行处理完后,最后执行一次 END 里面的 action

所以综合这些概念,BEGIN 是处理开始前,END 是处理结束后

ok,先到这里吧,下篇 blog 继续

http://www.dtcms.com/a/392940.html

相关文章:

  • 计网协议簇具体协议
  • 电路分析基础笔记
  • 【JVM 常用工具命令大全】
  • 从iload_1 iload_2 iadd字节码角度看jvm字节码执行
  • openssl 启用AES NI加速对AES加密性能影响的测试
  • LeetCode:32.随机链表的复制
  • 基于SpringBoot+Vue的旅游系统【协同过滤推荐算法+可视化统计】
  • 前端实现一个星空特效的效果(实战+讲解)
  • 【嵌入式】【科普】软件模块设计简介
  • 【ROS2】ROS2通讯机制Topic常用命令行
  • 欧姆龙NJ系列PLC编程标准化案例
  • 【OpenGL】LearnOpenGL学习笔记25 - 法线贴图 NormalMap
  • UE5 基础应用 —— 09 - 行为树 简单使用
  • 客户端实现信道管理
  • 异常解决记录 | Yarn NodeManager 注册异常
  • 【C#】C# 调用 Python 脚本正确姿势:解决 WaitForExit 死锁与退出检测问题
  • Java25新特性
  • 卷积神经网络CNN-part9-DenseNet
  • 深入浅出密码学第一章课后题(持续更新)
  • Mysql 入门概览
  • 大模型中权重共享的作用?
  • 【精品资料鉴赏】55页可编辑PPT详解 数字化高校智慧后勤解决方案
  • LLM大模型 - 实战篇 - AI Agents的开发应用
  • 【分布式技术】RedisShake相关功能详细介绍
  • qsv:一款高性能的CSV数据处理工具
  • `html` 将视频作为背景
  • 口播提词器怎么选?手机提词器实测指南与参数推荐
  • 解剖线性表
  • 计算数学研究方向有哪些细分领域?
  • [xboard]08-Makefile逐行分析2