Linux学习笔记(八):awk实战小案例--把数字金额用汉字表示

news2024/10/8 13:54:03

Linux学习笔记(八):awk实战小案例

怎么把数字金额用汉字表示?

思维过程

1.创建一个awk脚本文件

2.数据初始化

awk分为三部分:
BEGIN{} #主要初始化一些数据,定义一些静态值
...#中间代码
END{}

  • **我们需要初始化一个全局数组来记录汉字,方便取值,如["壹","贰",...]

3.校验

输入的校验,也许你应该校验输入值是不是一个合法金额

4.规整化

输入值,将所有输入值变成xxx.xx这样的格式方便操作

5.提取

提取出整数部分,和小数部分,并做出判断,如
全0:…
整数0: …
小数0: …
其他: …

分别处理

针对整数部分和小数部分分别编写函数进行汉字转变

  • 小数

提取出值在前面的初始化的数组中取值,如nums[i]
根据不同情况进行输出,主要处理0的情况

  • 整数

写一个方法,进行判断递归进行判断
如:

if (num >= 10000) {
		#取出剩下的
		nextNum = num % 10000;
		if (nextNum < 1000) return 递归(num / 10000) "万零" 递归(nextNum)
		return 递归(num / 10000) "万" 递归(nextNum)
}

类似的进行处理

调用

编写完成之后,进行调用看结果是否正确

代码

1.创建

touch num2zh

2.编写代码

#!/usr/bin/awk -f 
BEGIN{
  init()
}

{printf "%10s\t",$1}

!/^[+]?(([1-9][0-9]*)|0)(\.[0-9]{1,2})?$/{
  print "Error: Not a correct money"
  next
}

/+/{
  gsub(/+/,"")
}

{
  amount = sprintf("%.2f",$1)
  print num2str(amount)
}

function num2str(n)
{
  cents = substr(n,length(n) - 1,2)
  dols = substr(n,1,length(n) - 3)
  if (dols+0 == 0 && cents+0 == 0)
    return "零圆整"
  if (dols+0 == 0)
    return double2str(cents) 
  if (cents+0 == 0)
    return int2str(dols) "圆整"
  return int2str(dols) "圆" double2str(cents)
}

function int2str(n)
{
  if (n+0 >= 100000000) {
    nextNum = n % 100000000
    if (nextNum != 0 && nextNum < 10000000) 
      return int2str(int(n/100000000)) "亿零" int2str(nextNum)
    return int2str(int(n/100000000)) "亿" int2str(nextNum)
  }
  if (n+0 >= 10000) {
    nextNum = n % 10000
    if (nextNum != 0 && nextNum < 1000)
      return int2str(int(n/10000)) "万零" int2str(nextNum)
    return int2str(int(n/10000)) "万" int2str(nextNum)
  }
  if (n+0 >= 1000) {
    nextNum = n % 1000
    if (nextNum != 0 && nextNum < 100)
      return int2str(int(n/1000)) "仟零" int2str(nextNum)
    return int2str(int(n/1000)) "仟" int2str(nextNum)
  }
  if (n+0 >= 100) {
    nextNum = n % 100
    if (nextNum != 0 && nextNum < 10) 
      return int2str(int(n/100)) "佰零" int2str(nextNum)
    return int2str(int(n/100)) "佰" int2str(nextNum)
  }
  if (n+0 >= 10) {
    return int2str(int(n/10)) "拾" int2str(n%10)
  }
  if (n+0 == 0) return ""
  return nums[n]
}

function double2str(c)
{
  a = int(c/10)
  b = c % 10 
  if (a+0 == 0)
    return nums[b] "分"
  if (b+0 == 0)
    return nums[a] "角"
  return nums[a] "角" nums[b] "分"
}

function init()
{
  split("壹,贰,叁,肆,伍,陆,柒,捌,玖",nums,",")
}

3.使用

# 1.创建输入文件,如下
vi amount.txt
-300
123456.789
1234567.89
+987654.30
123456.00
3.4.5
0
100301
100300
100300.05
3000
300001
101010101.01

# 赋予可执行权限
chmod +x num2zh

#运行
./num2zh amount.txt

#结果
      -300      Error: Not a correct money
123456.789      Error: Not a correct money
1234567.89      壹佰贰拾叁万贰拾叁圆捌角玖分
+987654.30      玖拾捌万柒仟陆佰伍拾肆圆叁角
 123456.00      壹拾贰万叁仟肆佰伍拾陆圆整
     3.4.5      Error: Not a correct money
         0      零圆整
    100301      壹拾万零叁佰零壹圆整
    100300      壹拾万零叁佰圆整
 100300.05      壹拾万零叁佰圆伍分
      3000      叁仟圆整
    300001      叁拾万零壹圆整
101010101.01    壹亿零壹佰零壹万零壹圆壹分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8年JAVA逆袭转AI之路!成功拿下offer

前段时间有一个粉丝投稿&#xff0c;他是8年老Java程序员了&#xff0c;每天两小时的碎片化学习时间&#xff0c;不仅没有陷入程序员的年龄恐慌&#xff0c;还拿到了目前薪资翻倍的offer 问到他是什么让他坚持学了6个月&#xff0c;他用了华为总裁任正非说的“今后职场上只有…

Nginx03-使用

零、文章目录 Nginx03-使用 1、Nginx服务器启停命令 对于 Nginx 的启停在 Linux 系统中也有很多种方式&#xff0c;我们介绍两种方式&#xff1a; Nginx信号控制Nginx命令行控制 &#xff08;1&#xff09;Nginx信号控制 查看Nginx 中的 master 和 worker 进程 [rootloc…

计算机进制之间的关系

计算机中常见的进制 十进制、二进制、十六进制、八进制之间对照表 进制之间的转换 通过上面的十进制对应二进制进位的表示&#xff1a; 当二进制产生增加位数时&#xff0c;相对应十进制数为2、4、8、16、32、64、128&#xff0c;也被称为二进制的位权&#xff0c;根据规律可知…

linux中缓存,在kafka上应用总结

linux中的缓存 页缓存 pagecatch&#xff08;读缓存用于提供快速读&#xff09;块缓存&#xff08;用于提供其他设备快速写&#xff09;当对读缓存读的时候&#xff0c;修改了读的数据&#xff0c;页缓存就会被标记为脏数据&#xff0c;等到写的时候它会向块缓存同步数据&…

关于7zip解压缩的下载和使用

我们有的时候下载软件&#xff0c;后缀是 ".exe" 或者 “.zip”&#xff0c;".7z"等&#xff0c;".exe"文件还好&#xff0c;打开就能进行下载&#xff0c;但是“.zip”&#xff0c;".7z“等就需要用解压缩软件进行解压了。 今天介绍的解…

No.11 笔记 | PHP学习指南:从函数到面向对象概览

一、PHP函数&#xff1a;代码复用的艺术 1. 函数的本质与魅力 函数是PHP的核心力量&#xff0c;分为内置函数和自定义函数函数名应当简洁明了&#xff0c;以字母或下划线开头 2. 函数的构成要素 function 关键字&#xff1a;函数的开始标志函数名&#xff1a;您的函数的独特…

【Git原理与使用】远程操作标签管理

远程操作&&标签管理 1.理解分布式版本控制系统2.新建远程仓库3.克隆远程仓库4.向远程仓库推送5.拉取远程仓库6.配置 Git7.配置命令别名8.标签管理8.1创建标签8.2操作标签 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496;…

把当抠门程序员,遇到了免费AI大模型

这篇想和大家分享一下&#xff0c;一个抠门的程序员和一个免费的AI大模型的故事。 “抠门程序员<–>免费大模型”&#xff0c;让我看看&#xff0c;能不能擦出马内的火花。 故事的开始 不知道有没有程序员和我一样&#xff0c;付费的东西&#xff0c;都会省着点开。什…

远程访问服务是什么?如何通过节点小宝远程访问办公室电脑?

在家办公若能各安其位、高效完成任务&#xff0c;实为美事。然而&#xff0c;现实往往不尽如人意&#xff0c;偶尔需用到办公室电脑上的资料&#xff0c;这时便需依赖远程访问服务的助力。那么&#xff0c;远程访问服务究竟是何方神圣&#xff1f;又该如何借助节点小宝实现对办…

解锁空间距离计算的多种方式-含前端、空间数据库、后端

目录 前言 一、空间数据库求解 1、PostGIS实现 二、GIS前端组件求解 1、Leaflet.js距离测算 2、Turf.js前端计算 三、后台距离计算生成 1、欧式距离 2、Haversice球面距离 3、GeoTools距离计算 4、Gdal距离生成 5、geodesy距离计算 四、成果与生成对比 1、Java不…

CSRF | POST 型 CSRF 漏洞攻击

关注这个漏洞的其他相关笔记&#xff1a;CSRF 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;POST 型 CSRF 漏洞攻击 —— 理论篇 POST 型 CSRF 漏洞是指攻击者通过构造恶意的 HTTP POST 请求&#xff0c;利用用户的登录状态&#xff0c;在用户不知情的情况下&#xff0c;诱使浏览…

Mythical Beings:Web3游戏如何平衡创造内容、关注度与实现盈利的不可能三角

Web3游戏自其诞生以来&#xff0c;以去中心化和独特的代币经济体系迅速引起关注。然而&#xff0c;如何在创造内容、吸引用户和实现盈利之间达到平衡&#xff0c;始终是Web3游戏面临的核心挑战。Mythical Beings作为一款Web3卡牌游戏&#xff0c;通过创新设计和独特机制&#x…

java集合框架都有哪些

Java集合框架&#xff08;Java Collections Framework&#xff09;是Java提供的一套设计良好的支持对一组对象进行操作的接口和类。这些接口和类定义了如何添加、删除、遍历和搜索集合中的元素。Java集合框架主要包括以下几个部分&#xff1a; 接口&#xff1a; Collection&…

昆虫分类与检测系统源码分享

昆虫分类与检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

成都睿明智科技有限公司抖音电商服务佼佼者

在当今这个数字化浪潮汹涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多商家竞相追逐的新蓝海。而在这场电商盛宴中&#xff0c;专业的服务商如同灯塔一般&#xff0c;为迷茫的商家指引方向。今天&#xff0c;我们就来深入探讨一家备受瞩目的服务商—…

Qt-QSpacerItem布局相关控件(45)

目录 描述 属性 使用 控件小结 描述 使⽤布局管理器的时候,可能需要在控件之间,添加⼀段空⽩.就可以使⽤ QSpacerItem 来表⽰ 属性 width宽度height⾼度hData⽔平⽅向的 sizePolicy • QSizePolicy::Ignored : 忽略控件的尺⼨&#xff0c;不对布局产⽣影响。 • QSizePol…

业务封装与映射 -- FlexE

什么是FlexE FlexE&#xff08;灵活以太网技术&#xff0c;Flexible Ethernet&#xff09;是由OIF 定义的灵活以太客户端接口标准&#xff0c; 是承载网实现业务隔离和网络分片的一种接口技术&#xff0c;支持路由器和光传输设备之间的灵活以太网连接&#xff0c;实现接口侧业务…

牛顿法、L-M算法

在进行解方程的时候&#xff0c;如下所示方程 其中&#xff0c;相应的k11、k12、k21、k22都是已知常量&#xff0c;可以见到其是一个非线性方程。关于非线程方程的求解&#xff0c;我看到网上有两种方法&#xff0c;牛顿法与L-M算法。 1.牛顿法 之前貌似学过&#xff0c;学过…

基于SSM的服装自销电商平台设计

文未可获取一份本项目的java源码和数据库参考。 一、选题背景 在当今这个信息时代&#xff0c;“网上购物”这种购物方式已经为越来越多的人所接受&#xff0c;越来越多的人选择在网络上购买衣服&#xff0c;方便快捷且实惠。在这种背景之下&#xff0c;一个安全稳定并且强大…

Windows下的python安装教程_2024年10月最新最详细的安装指南

文章目录 前言一、下载python二、安装python三、验证环境四、配置环境变量&#xff08;可选&#xff09;总结 前言 Python 是一种广泛使用的高级编程语言&#xff0c;以其简洁易读的语法和强大的库支持而著称。无论你是初学者还是经验丰富的开发者&#xff0c;安装 Python 都是…