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

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 % 100000000if (nextNum != 0 && nextNum < 10000000) return int2str(int(n/100000000)) "亿零" int2str(nextNum)return int2str(int(n/100000000)) "亿" int2str(nextNum)}if (n+0 >= 10000) {nextNum = n % 10000if (nextNum != 0 && nextNum < 1000)return int2str(int(n/10000)) "万零" int2str(nextNum)return int2str(int(n/10000)) "万" int2str(nextNum)}if (n+0 >= 1000) {nextNum = n % 1000if (nextNum != 0 && nextNum < 100)return int2str(int(n/1000)) "仟零" int2str(nextNum)return int2str(int(n/1000)) "仟" int2str(nextNum)}if (n+0 >= 100) {nextNum = n % 100if (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 money0      零圆整100301      壹拾万零叁佰零壹圆整100300      壹拾万零叁佰圆整100300.05      壹拾万零叁佰圆伍分3000      叁仟圆整300001      叁拾万零壹圆整
101010101.01    壹亿零壹佰零壹万零壹圆壹分

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

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

相关文章

Final Glory推出“荣耀勋章-神龙”,推动游戏叙事范式发展

GameFi赛道因基建设施的缺失而长期处于加密市场的边缘位置&#xff0c;该叙事在市场中的占有率正在下降。不过好的一面是&#xff0c;随着MetaArena引擎面向市场&#xff0c;正在推动区块链游戏市场的叙事向全新的范式发展。 MetaArena引擎是以零知识证明方案为基础的Web3游戏基…

实现一个计算器的功能(一般形式、函数指针数组的形式、回调函数的形式)

实现一个计算器的功能&#xff1a; 一般的形式&#xff1a; #include<stdio.h> int Add(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int Mul(int x, int y) {return x * y; } int Div(int x, int y) {return x / y; } void menu() {printf…

Java中TreeMap,HashMap和LinkedHashMap的区别

先决条件&#xff1a;Java 中的 HashMap 和 TreeMap TreeMap、HashMap 和 LinkedHashMap&#xff1a;有什么相似之处&#xff1f; 所有类都提供键->值映射和遍历键的方法。这些类之间最重要的区别是时间保证和键的顺序。 HashMap、TreeMap 和LinkedHashMap三个类都实现了…

【数据结构】【队列】算法汇总

一、顺序队列【相当于一维数组】 1.准备工作 #define MAXQSIZE 100 typedef struct{QElemType*base;int front;int rear; }SqQueue; 2.队满&#xff0c;队空。入队&#xff0c;出队 二、链式队列 1.准备工作 typedef struct Qnode{ElemType data;struct Qnode*next; }Qnod…

Github优质项目推荐 - 第五期

文章目录 Github优质项目推荐 - 第五期一、【localsend】&#xff0c;47.5k stars - 附近设备文件互传二、【Pake】&#xff0c;29.9k stars - 网页变成桌面应用三、【laravel-crm】&#xff0c;10.7k stars - CRM 解决方案四、【localstack】&#xff0c;55.7k stars - 本地 A…

RabbitMQ(学习前言)

目录 学习MQ之前有必要先去温故下微服务知识体系&#xff0c;以加深本章节的理解 一、微服务间的通讯方式 1. 基本介绍 2. 同步通讯 2.1. 什么是同步通讯 2.2. 同步通讯存在的问题 问题一&#xff1a;耦合度高 问题二&#xff1a;性能和吞吐能力下降 问题三&#xff1a…

时序必读论文16|ICLR24 CARD:通道对齐鲁棒混合时序预测Transformer

论文标题&#xff1a;CARD: Channel Aligned Robust Blend Transformer for Time Series Forecasting 论文链接&#xff1a;https://arxiv.org/abs/2305.12095 代码链接&#xff1a;https://github.com/wxie9/CARD 前言 Transformer取得成功的一个关键因素是通道独立&#…

SpringBoot框架下旅游管理系统的创新设计与实现

第二章 相关技术简介 2.1 JAVA技术 本次系统开发采用的是面向对象的Java作为软件编程语言&#xff0c;Java表面上很像C&#xff0c;但是Java仅仅是继承了C的某些优点&#xff0c;程序员很少使用的C语言的特征在Java设计中去掉了。Java编程语言并没有什么结构&#xff0c;它把数…

Arduino UNO R3自学笔记21 之 Arduino电机的闭环控制(PID)

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;上篇写了电机速度测定&#xff0c;这篇主要是讲测定出的速度用于反馈&#xff0c;使得实际速度快速响应到需要的速度。 1.控制系统介绍 分2大类&#x…

​​​​​​​如何使用Immersity AI将图片转换成3D效果视频

随着技术的进步&#xff0c;图片处理变得越来越强大和直观。借助Immersity AI这样的工具&#xff0c;我们现在可以轻松地将平面图片转换成3D效果视频。以下是如何使用Immersity AI进行这一转换的详细步骤。 第一步&#xff1a;访问Immersity AI网站 首先&#xff0c;打开你的…

Spring开发最佳实践之跨域处理

1. 跨域处理 1.1 异常现象 1.2 异常原因分析 跨源资源共享的官方定义如下&#xff1a; 跨源资源共享&#xff08;CORS&#xff0c;Cross Origin Resource Sharing。或通俗地译为跨域资源共享&#xff09;是一种基于 HTTP 头的机制&#xff0c;该机制通过允许服务器标示除了它自…

在mac中通过ip连接打印机并实现双面打印

首先需要找到电脑自带的打印。添加打印机。 填写好打印机的ip地址&#xff0c;然后添加。 填写好ip地址后&#xff0c;直接添加就行 添加完打印机后其实就可以打印了。但是有些功能可能实现不了&#xff0c;比如说双面打印。为了实现双面打印的功能&#xff0c;需要再进行设置…

Vue83 引入elementUI

笔记 安装插件 安装按需引入插件 代码 ### App.vue <template><div><button>原生的按钮</button><input type"text"><atguigu-row><atguigu-button>默认按钮</atguigu-button><atguigu-button type"pr…

Arduino UNO R3自学笔记22 之 Arduino基础篇学习总结

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;目前将Arduino的大多数基础内容学习了&#xff0c;做个总结。 1.编程语言 学习单片机&#xff0c;在面向单片机编程时&#xff0c;语言是最基础的&#…

localhost与127.0.0.1傻傻分不清楚,区别详解来了

对应程序员来说&#xff0c;localhost和127.0.0.1经常使用&#xff0c;但是却又傻傻分不清楚&#xff01;尽管它们在实际应用中经常互换使用&#xff0c;但它们之间确实存在一些细微的差别。本文我将详细探讨localhost与127.0.0.1的区别。 一、定义与解析方式 localhost 定…

SSM外卖点餐软件APP-计算机毕业设计源码30768

目 录 摘要 1 绪论 1.1 研究背景 1.2研究目的 1.3论文结构与章节安排 2 外卖点餐软件APP系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能…

旅游管理自动化:SpringBoot系统设计与实现

第二章 相关技术简介 2.1 JAVA技术 本次系统开发采用的是面向对象的Java作为软件编程语言&#xff0c;Java表面上很像C&#xff0c;但是Java仅仅是继承了C的某些优点&#xff0c;程序员很少使用的C语言的特征在Java设计中去掉了。Java编程语言并没有什么结构&#xff0c;它把数…

【爬虫】网站反debugger、内存爆破以及网站限制开发者工具

【爬虫】网站反debugger、内存爆破以及网站直接限制开发者工具 声明&#xff1a;本文中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0…

就业市场需求分析:基于前程无忧岗位数据分析

背景介绍&#xff1a;在前程无忧网站&#xff0c;以"数据分析师""武汉"作为搜索关键词&#xff0c;爬取50页岗位数据合计980条。以该数据为基础&#xff0c;从岗位搜索匹配度、HR活跃度、不同区域/行业/企业的岗位数量和薪资分布等角度进行分析。 1、原始数…