AWK与SHELL脚本中对指定日期处理的异常情况

Shell脚本与AWK编程实战解析 本文围绕Shell脚本和AWK编程展开,介绍了目录创建、输入输出重定向问题、随机数生成、用户输入验证、文件存在性检查、日期命令优化、函数参数校验、条件语句语法修复、字符串裁剪函数编写以及AWK查找最长行等实用技巧,适合Linux/Unix系统编程人员参考学习。 阅读详情

对于awk的计算错误,百思不得其解啊。。。详细如下:

PS:有高手见到,请提示下,谢谢


源数据:wqq.txt

86216074|8009|20130301010303|15|2160||FID_FIX_3MOIS3|
86216074|8009|20130302020303|15|2160||FID_FIX_3MOIS3|
86216074|8009|20130303030303|15|2160||FID_FIX_3MOIS3|
86727780|8009|20130204010230|15|2160||FID_FIX_3MOIS3|
86977828|8024|20130227030230|90|2160||FID_FIXIN_3MOIS3|
81057519|8024|20130321050321|90|2160||FID_FIXIN_3MOIS3|
86727780|8009|20130324010321|15|2160||FID_FIX_3MOIS3|
86727780|8009|20130219010230|15|2160||FID_FIX_3MOIS3|
86977828|8024|20130227030230|90|2160||FID_FIXIN_3MOIS3|
86727780|8009|20130204010321|15|2160||FID_FIX_3MOIS3|


awk脚本:wqq1.sh

awk 'BEGIN{
	 FS="|";
	 OFS="|";
    }{
      if(FILENAME ~ /wqq.txt/)
      {                              
      	if($6=="")
        {
            "date -d '\''"substr($3,0,8)" +20 day'\'' +%Y%m%d"|getline newdate #日期处理
            $6=newdate""substr($3,9)
            print $3"--+20 day--->"$6
        }		
      }
     }' wqq.txt

执行结果:

Server:/usr # ./wqq1.sh
20130301010303--+20 day--->20130321010303
20130302020303--+20 day--->20130322020303
20130303030303--+20 day--->20130323030303
20130204010230--+20 day--->20130224010230       --1.正确
20130227030230--+20 day--->20130319030230       --2.正确
20130321050321--+20 day--->20130410050321
20130324010321--+20 day--->20130413010321
20130219010230--+20 day--->20130311010230
20130227030230--+20 day--->20130311030230        --同上面2的源值,但日期计算错误
20130204010321--+20 day--->20130311010321        --同上面1的源值,但日期计算错误


sh脚本:wqq2.sh
#!/bin/ksh

OLD_IFS="$IFS"
IFS="|"

while read line
do
	arr=($line)
	olddate=${arr[2]:0:8}
	newdate=`date -d "$olddate +20 day" +%Y%m%d`     #日期处理
        echo ${arr[2]}"--+20 day--->"$newdate${arr[2]:8}
done < wqq.txt

IFS="$OLD_IFS"

执行结果:

Server:/usr # ./wqq2.sh
20130301010303--+20 day--->20130321010303
20130302020303--+20 day--->20130322020303
20130303030303--+20 day--->20130323030303
20130204010230--+20 day--->20130224010230     --1.正确
20130227030230--+20 day--->20130319030230     --2.正确
20130321050321--+20 day--->20130410050321
20130324010321--+20 day--->20130413010321
20130219010230--+20 day--->20130311010230
20130227030230--+20 day--->20130319030230     --日期计算正确,同2
20130204010321--+20 day--->20130413010321     --日期计算正确,同1


数据处理中的自动化脚本:用 Shell 脚本实现数据的定时清洗与转换 Shell 是用户与 Linux 系统内核之间的桥梁,用户通过在 Shell 中输入命令与系统进行交互。Shell 脚本则是由一系列 Shell 命令、程序和控制语句组成的文本文件,能够自动执行特定任务。常见的 Shell 类型有 Bourne Shell(sh)、Bourne-Again Shell(bash)、C Shell(csh)等,其中 bash 由于其强大的功能和良好的兼容性,成为最广泛使用的 Shell 类型。Shell 脚本的基本结构包括脚本声明、注释、变量定义、命令执行和控制结构。 阅读详情

相关推荐

Awk处理文件中的日期差异

本文介绍了使用Awk脚本处理文本文件中日期差异的方法。针对一个包含11列任务记录的实例文件,作者尝试计算第二列日期与当前日期的天数差并添加到第12列。初版Awk命令遇到行尾格式问题(CRLF导致数据错位),提供了两个解决方案:使用dos2unix转换文件格式,或在Awk脚本中移除回车符。最终成功实现日期差异计算,强调跨平台处理文本时行结束符的重要性,展示了Awk在文本数据处理中的强大功能。

m0_62153576的博客 120

awk 日期比较

cat ./t2.log|awk '{mon["Jan"] = "01"; mon["Feb"] = "02"; mon["Mar"] = "03"; mon["Apr"] = "04"; mon["May"] = "05"; mon["Jun"] = "06"; mon["Jul"] = "07"; mon["Aug"] = "08"; mon["Sep"] = "09"; mon["Oct"] = "10"; mon["Nov"] = "11"; mon["Dec"] = "12"; org=$1 "

766

linux awk时间计算脚本及awk命令详解

在linux如果计划时间是个麻烦事, 用awk脚本如下 BEGIN {FS=:;OFS=:} {total_seconds=total_seconds+$3} total_seconds>=60 {total_seconds=total_sconds-60 $2=$2+1 } {total_minutes=total_minutes+$2 $2=$2+1 } {total_minutes=total_minutes+$2} total_minutes>=60{total_minutes=total_minutes-60 $1=$1+1} {total_hours=t

Linux中awk比较时间,linux – 用AWK增加日期几天和几个月

使用AWK增加日期大家好,我需要你的帮助.我有一个文件“test.csv”,我想增加“6个月”和“10天”的日期,以便我得到以下输出:test.csv:"000001","TEST1","2013-05-07 16:02:07","ACTIVE""000003","TEST3","2013-05-09 16:02:07","ACTIVE""000004","TEST4","2013-05-10 1...

weixin_39643336的博客 240

【补充:脑电绘图教程 2】如何手动去除ICA伪迹分量

ICA可以将脑电信号分解为多个IC分量,由每个分量的平均功率地形图可以看出哪些分量属于伪迹,去除伪迹分量后,即可得到“干净”的脑电信号。本教程主要总结如何人工识别出ICA伪迹分量,不涉及ICA的原理讲解。本教程的主要知识来源是ICLabel官网ICLabel致力于自动识别IC分量属于哪种伪迹,并标记伪迹占比,可以在eeglabel中很方便地使用。ICLabel给出了几种常见伪迹的特点,本教程主要是根据ICLabel给出伪迹特点,对自己的数据集手动去除伪迹,以更深入了解自己数据集的质量和伪迹特点。

qq_40735196的博客 4232

Ubuntu22.04下安装LDAP

在Ubuntu22.04的时候可以使用apt的方式来安装,在安装LDAP的web 服务器的时候可以考虑选择 LDAP 帐户管理器 (LAM)。因为 PHPLDAPadmin 安装时需要 php 的环境依赖,相对来说安装麻烦。此外在 PHPLDAPadmin 中创建组织和用户时与平常的语法有很大不同,对新手来说不友好。

dl_11的博客 3944

【无标题】awk 日期转时间戳比较

startline=`cat ./t2.log|awk '{mon["Jan"] = "01"; mon["Feb"] = "02"; mon["Mar"] = "03"; mon["Apr"] = "04"; mon["May"] = "05"; mon["Jun"] = "06"; mon["Jul"] = "07"; mon["Aug"] = "08"; mon["Sep"] = "09"; mon["Oct"] = "10"; mon["Nov"] = "11"; mon["Dec"] = "12"

721

SAP系统中PP模块全配置文档

配置路径IMG>SAP NetWeaver>常规设置>维护日历>工厂日历事务代码SCAL要求传输工厂代码描述日历代码日历描述起始日期星期一星期二星期三星期四星期五星期六星期日有效开始日期有效结束日期1000南微医学工厂MT南微医学工厂日历√√√√√√√201820502.4定义工厂配置路径IMG>生产>物料清单>常规数据>定义BOM状态事务代码OS23要求传输配置路径IMG>生产>主数据>资源>常规数据>标准值>定义参数。

yanzibing99的博客 1894

awk的经典实战案例——筛选给定时间范围内的日志

sed/awk用正则去筛选日志时,如果要精确到小时、分钟、秒,则非常难以实现。但是awk提供了()函数,它可以将时间转换成epoch时间值2019-11-10 03:42:40转换成epoch为1970-01-01 00:00:00借此,可以取得日志中的时间字符串部分,再将它们的年、月、日、时、分、秒都取出来,然后放入mktime()构建成对应的epoch值。因为epoch值是数值,所以可以比较大小,从而决定时间的大小。

m0_69582710的博客 305

避开期货指标常见坑:文华财经赢顺DK多空指标优化配置指南(附参数调试技巧)

本文详细解析了文华财经赢顺DK多空指标的优化配置方法,帮助交易者避开常见使用误区。通过参数个性化适配、动态调整趋势阈值和过滤假信号的三重验证,提升指标在期货交易中的准确性。附有参数调试技巧和不同市况下的配置建议,适合中高级交易者参考。

weixin_29063979的博客 434

CentOS 7 安装 Python 3.10

我这里已经软链接了,正常未链接之前是python->python2.7而不是python3.10。python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用。2. 安装 Python 3.10 必需的 openssl >= 1.1.1。默认的centos7是没有安装pip,先添加epel扩展源。/usr/bin/python 修改为如下。添加软链接,将原来的链接备份。添加python3的软链接。

bensonyang888的博客 2905

【Linux】Shell脚本学习总结篇

【Linux】Shell脚本学习总结篇shell学习分为下面3个部分: shell基本命令回顾 shell基本语法学习 awk/sed 工具学习 关于shell的介绍之类的在这里不做赘述!shell基本命令回顾1.1 最基础的常用命令(注:命令选项直接 man 查看,不做说明) 1.1.1 查看文件和目录的命令ls : 列出目录下的清单; cat: 连接显示文件内容 less/more: 分页显

John的博客 2万+

【数据集】30 m地表温度LST数据集

【数据集】30 m地表温度LST数据集

WW、forever的博客 1130

Shell脚本,获取各种日期[全]

获取上个月的第一天和最后一天, 获取前一天,日期循环

weixin_42326851的博客 1万+

手把手教你学Simulink--基于未来出行解决方案的场景实例:电动飞行汽车(eVTOL)的动力系统建模与仿真

电动垂直起降飞行器零道路拥堵:三维空间飞行绿色低碳:全电驱动,零排放快速响应:城市内15分钟直达低噪音:相比直升机↓20dB📊 预测:2030年全球eVTOL市场规模将超300亿美元,中国、美国、欧洲加速适航认证。本文通过,构建了电动飞行汽车(eVTOL)动力系统高压电池系统建模电力电子(DC-DC、逆变器)实现PMSM电机+螺旋桨推进系统搭建完整飞行任务动态仿真性能KPI评估与优化。

MHD0815的博客 443

RK3399平台开发系列讲解(内核入门篇)1.2、如何高效的阅读Linux内核设备驱动

内核开发在很大程度上并不是重新造“轮子”的过程,而是深入理解并尽量复用现有的内核设计框架,然后参照相似的功能模块去添加或改写某项需要的功能。在对内核整体框架以及某些子系统融会贯通以后,我们才有可能站在巨人的肩膀上去改进框架本身,实现自主创新。如果过分强调不必要的“自主创新”,可能会让内核的可维护性变差,最终结果反而得不偿失。 那么此次就分享就围绕如何高效的阅读内核驱动代码:

内核笔记 7341

shell脚本学习笔记(三)—— if、xargs、awk

1 if语句1.1 shell脚本中判断文件和目录是否存在查看某目录是否存在,不存在就创建,存在就退出并打印提示。if [ ! -d "$DIR" ] then mkdir -p "$DIR" else echo "存在目录${DIR},请查看其中内容,再做修改备份!" return # exit-d参数是判断目录是否存在,-f参数则是判断文件是否存在。if [ ! -f

Robot Man的技术博客 3932

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Linux Shell 脚本编程基础知识篇—awk的条件判断(3)

本文主要了解awk命令的条件判断语句,if语句,do...while循环,for循环以及相关awk练习。 在Shell脚本中的条件判断语句,与C语言、PHP语法里的条件判断语句如出一辙,学过C语言条件判断语句的朋友应该深有体会!!!

weixin_55767624的博客 1765

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

解决awk中无法使用shell变量问题及脚本使用命令行对用户进行切换的问题

问题一、解决awk中无法使用shell变量问题 项目背景 需要通过提取 去重后的操作日志里面 第一列账号 + 设定日期 来作为数据字段 导入到ORACLE库 逻辑是在通过管道对 提取数据的同时,把设定日期作为 新的一列 加入到新的文本文件里,问题就出现在这个时间变量这里, 本来先给时间变量赋值,然后把变量放在命令行里是没问题的,可是在awk 里就出现了问题, 反复测试依然是相同的结...

u012972294的博客 1484

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Shell中的awk

一、awk基本介绍 1、awk工作原理 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 awk倾向于将一行分成多个"字段"然后再进行处理。 awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。 使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"|"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

weixin_45305723的博客 2008

工作脚本处理文本shell

简单的使用shell,而且平时学习一下,如果不动手写的话,真是完全没有啥用啊, 所以,代码还是写出来的。 把下边的脚本代码贴出来。怕忘记了。 涉及到数据库连接,awk使用,日期函数,字符串模糊匹配。 [plain] view plain copy #!/bin/bash      DIR_

benpaobagzb的博客 594

linux shell 日期比较大小,在Shell中使用日期运算和比较详解

脚本内容大概主要包括以下: 1、有且只有两个输入参数,都是必输项。 2、参数的格式是日期且格式是“yyyyMMdd"(如:20140101) 3、第二个参数一定要比第一个参数晚 4、最终的执行结果就是将两个日期区间的日期打印出来。#!/bin/bashstartDate="$1"endDate="$2"DATE_FMT="%Y%m%d"source ./log.shexport DEBUG="tr...

weixin_39844549的博客 2303

shell脚本之awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具

xiaol_csdn_xiaol的博客 207

shell 在文本的每行开头都加上一个日期

先说下简单的方法: 这个需求可以分为两种: 1、在文本的每行开头都加上一个字段(日期、时间、或者其它),但是这个是固定的,不会发生变化 2、在文本的每行开头都加上一个字段(例如当天的时间),那么这个时间就是变化的,每天的时间都不一样。 对于需求1可以用下面两个命令: awk '{print "20200323 " $0}' test.file sed 's/^/20200309& /g'...

猫瑾的博客 3034

Shell+awk脚本的应用(Linux三剑客之一)

shell判断闰年的星期 existDayInMonth(){ year="$1" day="$3" if [ "$year" -lt 1582 -o "$year" -gt 9999 ];then echo -e "----------------------请输入1582-9999的年份!----------------------\n" retu...

BackToMe的博客 214

linux awk 时间函数,关于shell:如何在awk脚本中进行日期/时间计算和格式化?

我有一个文件test.txt,有多个记录,如下所示。100,200,300,08-May-2012 11:24:25100,400,300,25-May-2012 09:24:25现在,我想使用以下"格式"输出数据:$1,$2,$3,$4,$4+30days,$4+60days,$4+90days号我怎样才能用awk来做到这一点?你想什么?这是你使用variant of Unix?你有一个可用的G...

weixin_42298760的博客 800
上一篇: Oracle 语言分类(DDL,DML,DCL,TCL)
wqq_721
博客等级 码龄18年 10粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值