shell 月份英数格式转换,月份英文转换成数字
对于处理百万级别以上的数据,提供三个方法对比:
方法一大约耗时25分钟(for循环)
方法二大约耗时7分钟(for循环)
方法三大约耗时10秒(awk工具)
现在有个文本,里面数据是日-月-年,如下:
任务就是将上面的日期转换成YYMMDD格式。
例如第一个的17-MAR-20,则是转换成20200317
那么需求就很简单了,将中间的英文提取转换成数字月份,然后重新排列组合就行了。
转换后的结果:
方法一:
代码如下:
for tmp in `cat file |awk -F '[,]' '{print $3}' `;
domonth=`echo $tmp|awk -F '[-]' '{print $2}'`#echo $monthcase $month inJAN|Jan|jan)echo $tmp|awk -F '[-]' '{print 20$(3)01$1}'>>file_new;;FEB|Feb|feb)echo $tmp|awk -F '[-]' '{print 20$(3)02$1}'>>file_new;;MAR|Mar|may)echo $tmp|awk -F '[-]' '{print 20$(3)03$1}'>>file_new;;APR|Apr|apr)echo $tmp|awk -F '[-]' '{print 20$(3)04$1}'>>file_new;;MAY|May|may)echo $tmp|awk -F '[-]' '{print 20$(3)05$1}'>>file_new;;JUN|Jun|jun)echo $tmp|awk -F '[-]' '{print 20$(3)06$1}'>>file_new;;JUL|Jul|jul)echo $tmp|awk -F '[-]' '{print 20$(3)07$1}'>>file_new;;AUG|Aug|aug)echo $tmp|awk -F '[-]' '{print 20$(3)08$1}'>>file_new;;SEP|Sep|sep)echo $tmp|awk -F '[-]' '{print 20$(3)09$1}'>>file_new;;OCT|Oct|oct)echo $tmp|awk -F '[-]' '{print 20$(3)10$1}'>>file_new;;NOV|Nov|nov)echo $tmp|awk -F '[-]' '{print 20$(3)11$1}'>>file_new;;DEC|Dec|dec)echo $tmp|awk -F '[-]' '{print 20$(3)12$1}'>>file_new;;esac
done
有一个问题就是,上面的这样转换效率不快,1M的文本转换要接近10多甚至20分钟!
当然如果是小文本就无所谓了,我接触的数据基本都是百万级别的,就很尴尬。
这个效率问题还没想好要怎么去解决,以后如有办法解决效率问题再更新、。
······############################################·····
方法二
更新一下方法,下面这个方法处理百万级别的数据要7分钟左右:
for tmp in `cat file |awk -F '[,]' '{print $3}' `;
dodate "+%Y%m%d" -d $tmp >> test.txt
done
这方法对于超过M级别的数据也是不行的,不符合大数据处理思想。
方法三
用awk处理就很快,大概10多秒就可以了。
awk是个强大的工具~
方法如下:
#直接使用gsub函数替换掉MAR成03,这种方法速度极快(1、2秒就能处理完毕),其它月份也是同样处理
awk '{gsub(/JAN/,"01")}1' u_file_nane > $name.tmp0
awk '{gsub(/FEB/,"02")}1' $name.tmp0 > $name.tmp1
awk '{gsub(/MAR/,"03")}1' $name.tmp1 > $name.tmp0
awk '{gsub(/APR/,"04")}1' $name.tmp0 > $name.tmp1
awk '{gsub(/MAY/,"05")}1' $name.tmp1 > $name.tmp0
awk '{gsub(/JUN/,"06")}1' $name.tmp0 > $name.tmp1
awk '{gsub(/JUL/,"07")}1' $name.tmp1 > $name.tmp0
awk '{gsub(/AUG/,"08")}1' $name.tmp0 > $name.tmp1
awk '{gsub(/SEP/,"09")}1' $name.tmp1 > $name.tmp0
awk '{gsub(/OCT/,"10")}1' $name.tmp0 > $name.tmp1
awk '{gsub(/NOV/,"11")}1' $name.tmp1 > $name.tmp0
awk '{gsub(/DEC/,"12")}1' $name.tmp0 > $name.tmp1
#把十二个月份的都替换完成,那么数据就由17-MAR-20转换成17-03-20
#再对17-03-20排列组合就OK了
cat $name.tmp1|awk -F ‘[-]’ '{print 20$3$2$1}' > date.txt
#date.txt的文本格式就是YYMMDD的了,即 17-MAR-20 转换成了 20200317
shell 月份英数格式转换,月份英文转换成数字相关推荐
- java 英文日期转数字_DatePickerDialog的月份为英文转成数字
在项目中,发现使用日期选择器的时候,不同手机系统日期选择框显示的日期不同,有的是中文的,有的是英文!之前以为是系统语言的问题,后面发现其实不是,是Android的日期选择框的bug. 一.现附上效果图 ...
- java 数字翻译成英文_java 英文翻译成数字
展开全部 import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java ...
- teradata数据库中增加月份、取别名、数据类型(时间戳)转换、替换中使用正则表达式、去除空格以及字段格式调整汇总
1.对时间月份的增加: 获取月份的函数为:extract(month from date) 增加月份为:add_months(date,2)显示两个月之后时间 2.取别名: 除了常用的直接在字段后用a ...
- Excel函数 - 提取月份,转换月份格式
将B列的日期格式转换为中文格式的月份. 出生日期 月份1 月份2 35927 =TEXT(A2,"[DBnum1]m月") =TEXT(A2,"m月") B2单 ...
- 阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]
阿拉伯数转中文与英文 前言 一.阿拉伯数字转换 1.阿拉伯数字转中文 a.案例 b.解决方案 2.阿拉伯数转英文 a.案例 b.解决方案 总结 参考文献 前言 如果思考算法的解法方案是一种模拟,那么这 ...
- 题8.18:编一程序,输入月份号,输出该月的英文月名。例如,输人3,则输出“March“ ,要 求用指针数组处理。
题目 本题是谭浩强<C程序设计课后习题>题8.18. 题目: 编一程序,输入月份号,输出该月的英文月名.例如,输人3,则输出"March" ,要 求用指针数组处理. 以 ...
- (C语言)编一程序,,输入月份号,输出该月的英文月名,例如,输入3,则输出March,要求用指针数组处理
编一程序,输入月份号,输出该月的英文月名,例如,输入"3",则输出"March",要求用指针数组处理 #define _CRT_SECURE_NO_WARNIN ...
- 苹果挖走英特尔5G项目一重要工程师 领英资料显示2月份就已入职
[TechWeb]4月29日消息,据国外媒体报道,在同高通和解之前,苹果在5G芯片方面陷入了前所未有的困境,而在同高通和解并达成多年的芯片供应与专利授权协议之后,外界对苹果5G芯片的担忧也就暂时告一段 ...
- unity 只输入中英数_UITextField只限中文、英文、数字输入和限制字符个数的实现方法...
写在前面 一般情况下一个字母.符号.数字相当于一个字符,一个汉字相当于两个字符,一个emoji表情相当于两个或更多字符.本文要实现的是在UITextField只允许输入一定字符数的中文.英文和数字,不 ...
最新文章
- 面试题mysql环境搭建_Linux运维必会的100道MySql面试题之(四)
- [数字信号处理]IIR滤波器的间接设计(C代码)(转)
- PHP安装swoole扩展
- rails.vim环境安装(ubuntu)
- Python爬虫应用实战-如何对爬取的数据进行数据存储?
- (转) 设置sqlplus中的退格键
- 轻量高效!清华智能计算实验室开源基于PyTorch的视频 (图片) 去模糊框架SimDeblur
- 表格合并行_合并行table表格
- Python从菜鸟到高手(1):初识Python
- [转]google protobuf安装与使用
- C++调用caffe分类模型-Opencv3.4.3
- pandas.Series.values
- 使用APUE源码找不到apue.h
- 8cm等于多少像素_像素和厘米的换算
- Android平台车牌识别开发手册
- Win10系统C++调用OpenCV实现网络摄像头录像和抓拍图片
- 2020第五届上海第二工业大学新生程序设计竞赛(Java题解)
- 线性回归算法在 java 中是如何实现的?
- 学习ARM开发(2)
- 手把手教你用delphi 10.2.3 在windows上编译Centos 7下的命令行程序,适合中小学生