bash:如何在没有 date -d 选项的情况下比较 Solaris 上的两个日期

2024-01-02

我试图将日志文件行中输入的日期与昨天的日期进行比较,如果差异超过一天,则它会打印日志文件中的该行。

日志档案:

$more ActiveX2Alarms.log
2016-09-30 01:40:14 MET;faultManager:network@ET_AO_L_0165_abcde@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ET_AO_L_0165_abcde_44159@x2Transp-0|alarm-2632-3-698;ET_AO_L_0165_abcde;major;2632
;lte.IK4009022;3;698
2016-11-01 08:10:51 MET;faultManager:network@ER_AO_L_4283_abcde@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ER_AO_L_4283_abcde_14179@x2Transp-0|alarm-2632-3-698;ER_AO_L_4283_abcde;minor;2632;lte.IK4009022;3;698
2017-01-03 12:14:31 MET;faultManager:network@EM_AO_L_4065_abcde@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_EM_AO_L_4065_abcde_44094@x2Transp-0|alarm-2632-3-698;EM_AO_L_4065_
abcde;minor;2632;lte.IK4009022;3;698

我使用cygwin在Windows上创建了测试环境。 在Cygwin中,我成功了o/p。

这是我使用的初始代码:

awk -v d="$(date -d "yesterday" +'%Y-%m-%d %H:%M:%S')" '$1 " " $2 < d' /cygdrive/f/Script_X2/Final/Last_Trial/ActiveX2Alarms.log

Result:

2016-09-30 01:40:14 MET;faultManager:network@ET_AO_L_0165_abcde@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ET_AO_L_0165_abcde_44159@x2Transp-0|alarm-2632-3-698;ET_AO_L_0165_abcde;major;2632
;lte.IK4009022;3;698
2016-11-01 08:10:51 MET;faultManager:network@ER_AO_L_4283_abcde@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ER_AO_L_4283_abcde_14179@x2Transp-0|alarm-2632-3-698;ER_AO_L_4283_abcde;minor;2632;lte.IK4009022;3;698

但是,当在主服务器上使用相同的命令时,我收到错误:

date: illegal option --d

搜索错误,我了解到它与已安装的 Solaris 软件包有关

$uname -a
SunOS xxxxxx 5.10 Generic_150400-15 sun4u sparc SUNW,SPARC-Enterprise

$date --version
date: illegal option -- version
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
        date [-u] [+format]
        date -a [-]sss[.fff]
$date --help
date: illegal option -- help
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
        date [-u] [+format]
        date -a [-]sss[.fff]

所以我使用下面的代码来避免这个问题,但是它没有给出任何输出......所以仍然有问题,请帮忙!

$awk -v YESTERDAY="`TZ=GMT+20 date +'%d-%m-%Y %H:%M:%S'`" '$1 " " $2 < YESTERDAY' ActiveX2Alarms.log
awk: syntax error near line 1
awk: bailing out near line 1

$/usr/xpg4/bin/awk -v YESTERDAY="`TZ=GMT+20 date +'%d-%m-%Y %H:%M:%S'`" '$1 " " $2 < YESTERDAY' ActiveX2Alarms.log
$

要确认 YESTERDAY 变量分配是否成功:

$YESTERDAY="`TZ=GMT+20 date +'%d-%m-%Y %H:%M:%S'`"; echo $YESTERDAY
02-01-2017 16:51:26

日志文件和日志文件之间的日期格式不同YESTERDAY,但应该匹配。由于日志文件按 Y-M-D 顺序排列,因此请使用:

awk -v YESTERDAY="`TZ=GMT+20 date +'%Y-%m-%d %H:%M:%S'`" '($1 " " $2) < YESTERDAY' ActiveX2Alarms.log
                                    ^^^^^^^^ was %d-%m-%Y

在我的测试系统(也是 cygwin)上,这给出了您在问题中显示的相同的两行输出。

这是因为awk正在比较字符串,而不是日期,因此日期必须采用 Y-M-D 格式才能按数字排序。awk不会自动将日期字符串转换为实际日期(据我所知)。我添加了括号($1 " " $2)澄清您正在创建一个将与另一个字符串进行比较的字符串。

Caution: 虽然我认为你的TZ=GMT+20hack 非常酷,GMT+20 只比 MET 早 19 小时,而不是 24 小时。所以,YESTERDAY如果您在错误的时间运行脚本,将无法正确设置。这个答案 https://stackoverflow.com/a/11864653/2877364有一个如何获取昨天日期的示例bash不考虑时区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash:如何在没有 date -d 选项的情况下比较 Solaris 上的两个日期 的相关文章

  • Cron 不会导入 pandas 模块来执行 python 脚本。 ```导入错误:没有名为 pandas 的模块```

    我使用的是xubuntu 18 01 我有一个 python 程序 可以抓取天气数据并将文件保存为 csv 运行命令完美运行weatherdata在我授予它许可后 在终端中使用chmod x weatherdata 我希望使用 cron 每
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 大括号语法 ${var%.*} 是什么意思?

    我正在查看一些旧代码并遇到了以下语法 extractDir downloadFileName tmp 我发现搜索的唯一信息是指命令列表 但这只是一个变量 这个大括号语法在 bash 中意味着什么 在这种背景下 它是一个参数替换 http w
  • 有哪些基于对象的 shell?

    我打算写一个面向对象的shell 基于Python 我已经有很多想法了 但在实现它之前 我想通过一些现有的 shell 来激发我的灵感 我所说的面向对象的基本意思是 参数不仅仅是字符串数组 而且是对象数组 返回值也是一个对象 不仅有 std
  • system 和 shell_exec 之间的区别

    有什么区别shell exec and systemPHP 中的方法 两者都采用单个命令行参数并在 PHP 中运行 使用其中一种比另一种更好吗 请参阅此处的解释 http chipmunkninja com Program Executio
  • 如何比较两个文件中的多列并在找​​到匹配时从另一列检索相应的值

    我有两个文件 File1 txt 和 File2 txt 我需要将 File1 中的三列 1 2 和 3 分别与 File2 的 4 5 和 6 进行比较 如果找到匹配项 我想从 File2 的第 2 列中检索相应的值并将其粘贴到输出中 T
  • 如何使用 git hook pre-merge-commit 获取原始合并分支名称

    我正在尝试使用新的 git hook pre merge commit 创建一个特定的脚本 但它没有参数 有什么解决方法可以让我获得正在合并的分支的名称吗 例子 在分支 myBranch 上 我调用 git merge testingBra
  • 如何将整数日期转换为格式化日期字符串(即 2012009 到 2/01/2009)

    有任何想法吗 我想不出任何办法 我有一个从 csv 文件加载的日期列表 它们被保存为所有整数 或者更确切地说是一串整数 即 2009 年 1 月 1 日 1012009 关于如何将 1012009 变成 1 01 2009 有什么想法吗 T
  • 将年月格式转换为 POSIXct [重复]

    这个问题在这里已经有答案了 我有一些年月形式的数据 我想将其格式化以用于绘图ggplot date lt c 2016 03 2016 04 2016 05 2016 06 2016 07 2016 08 2016 09 2016 10 2
  • unix 下日期字段排序

    我有包含数十万条记录的文本文件 其中一个字段是日期字段 有没有办法根据日期字段对文件进行排序 09 APR 12 04 08 43 632279000 AM 19 MAR 12 03 53 38 189606000 PM 19 MAR 12
  • Python 脚本:每次打印新行到 shell,而不是更新现有行

    说到Python 我是个菜鸟 我有一个 python 脚本 它给我这样的输出 last ZVZX W3vo9I Downloading video webpage last ZVZX W3vo9I Extracting video info
  • 类似 jq 中的 sql join

    我有以下 json id 1 type folder title folder 1 id 2 type folder title folder 2 id 3 type item title item 1 folder 1 id 4 type
  • Spring-roo REST JSON 控制器损坏日期字段

    我有一个以两种方式使用的数据实体 我在页面加载时用其中的一些数据填充表格 当您单击该列的一行时 我通过 AJAX 获取该项目的详细信息并将其显示在表单字段中 我在服务器端使用 Spring Roo 生成的 REST 端点 在客户端使用 Ba
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • SimpleDateFormat.parse() 忽略模式中的字符数

    我正在尝试解析一个可以具有不同格式的日期字符串 尽管字符串不应与第二个模式匹配 但它却以某种方式匹配 因此返回错误的日期 这是我的代码 import java text ParseException import java text Sim
  • 通过 bash 命令设置 gitlab-ci.yml 变量

    variables CUSTOM NODE VERSION cat nvmrc 我想要变量CUSTOM NODE VERSION通过内容填充 nvmrc文件 位于项目根目录中 如何在gitlab ci yml file 上面的例子不起作用
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • bash 子 shell 中出现陷阱“kill 0”的分段错误

    我正在尝试编写一个并行构建多个 Dockerfile 的小脚本 但是如果我想取消该脚本 我也想杀死子进程 这样做的结果是segmentation fault 不知道为什么 为了澄清我正在杀死脚本 C trap kill 0 SIGINT S
  • AWK:递归下降 CSV 解析器

    响应一个BASH 中的递归下降 CSV 解析器 https codereview stackexchange com questions 11727 need some advice or help with translation and

随机推荐

  • 尝试执行“bin/mkdistro.sh -DskipTests”时出现 Oozie 错误

    尝试安装 oozie 4 0 1 以下http www thecloudavenue com 2013 10 installation and configuration of html http www thecloudavenue co
  • 已标记我的主页的帖子不会通过 API 调用显示

    我为我的服务创建了一个 Facebook 页面here http www facebook com pages Rowz 265813166783408 该页面的名称是 Rowz 该页面上有一些用户在自己的墙上的帖子中标记了该页面的帖子 这
  • PHP 读取最快的序列化数据格式

    我有一个 PHP 前端和一个 C 后端 我需要能够将一组名称发送到前端 对于 PHP 来说 哪种序列化格式读取最有效 最快 示例数据 group1 name1 3923 name2 9879 name3 8944 group2 name5
  • Oracle 星期几问题[重复]

    这个问题在这里已经有答案了 然而 下面的语句返回正确的星期几 当 case 子句中使用表达式时 它不起作用 Select to char SYSDATE Day Dwo case when to char SYSDATE Day Thurs
  • 如何查找包中的活动名称?安卓。亚行外壳

    我可以获得 Android 上安装的所有软件包的列表 但要打开应用程序 我需要活动名称和软件包名称 有没有办法通过 adb shell 列出包中的所有活动 从手机中提取的 Android 清单文件没有帮助 因为它是文件的二进制版本 因此不包
  • array_push 不会给出数组,而是打印出整数值

    我正在使用 array push 编写一个非常简单的 php 程序 但根据文档它无法正常工作 每次我尝试打印最终数组的值时 它都会给我一个整数 有人可以帮我解决这个问题吗 这是我的代码 这是它的输出 9 先谢谢您的帮助 array push
  • Nginx 不将 Cookie 传递给代理

    我有一个 cookie 设置适用于所有子域 example com 我有 nginx ajax 调用通过 proxy pass 但 cookie 不会保留 我的配置如下 server listen 80 server name www ex
  • 如何在 Emacs/elisp 风格的正则表达式中用“\(”替换“(”?

    问题如标题 更具体地说 我厌倦了打字 等等 每次我想在 Emacs 的 交互式 正则表达式函数中使用括号 更不用说 在代码中 所以我写了类似的东西 defadvice query replace regexp before my query
  • MvvmCross Xamarin.Forms 模态对话框

    我只是想用 MvvmCross 制作我的第一个应用程序 但我的应用程序已经遇到了问题 并且在网络上找不到任何相关内容 我想在支持的设备 例如 iPad 上打开特定页面作为模式对话框 对于我的非 MvvmCross 应用程序 我使用 Rg P
  • 如何使用 Bootstrap 3 模态来实现 JavaScriptalert()?

    如果我的 HTML 标头中的 JavaScript 代码中有警报 例如 有没有办法可以使用 Bootstrap 中的模式窗口而不是浏览器的本机警报窗口 如果是这样 有人可以向我展示上面一行代码的简单示例吗 模式应该只有一个 确定 按钮 没什
  • p5.j​​s 中的上下移动(并使用 WASD)

    在p5中如何使用键盘让角色移动 我的意思是 不仅仅是向左和向右 我还想使用 WASD 键 我用过这个 形状作为占位符 https editor p5js org TheDiamondfinderYT present 8ZqV2LsVB ht
  • 如何用Pickle存储自我价值?

    class Player def init self self money 0 self level 0 self xp 0 self xp until level 20 self taxi car Cabbie self busines
  • 在 Jenkins 中配置 GitLab 存储库

    我正在尝试配置 Jenkins 在 Windows Server 2008 上运行 以连接到 GitLab 6 0 存储库 在 Linux 机器上 从我的本地 Windows 盒子中 我可以使用 SSH URL 来克隆我的 GitLab 服
  • 将参数传递给另一个可变参数函数

    有没有什么方法可以让这段代码按预期编译和工作 而无需求助于va list stuff include
  • Android LVL(许可服务)非常慢! ——解决方案?异步?

    我在网上查了一下 看到其他一些帖子抱怨 Android 许可 LVL 库如何缓慢 但没有解决方案 在 HTC Thunderbolt 全新手机 上 它会使测试应用程序的启动时间延迟 3 5 秒以上 有人对异步调用这个库有任何经验或想法吗 其
  • 如何让 Eclipse 自动生成新 Java 类的 main 方法?

    有谁知道我的 Eclipse 不预加载的原因 public static void main String args 当我创建一个新课程时 我该怎么做才能让它自动出现 Type main and press ctrl space The e
  • 提取 Windows 中任何文件的缩略图

    从任何文件 而不仅仅是不同大小的图像 中提取缩略图的最有效方法是什么 我已经查看了所有内容 其中最有希望的是 Windows API ShellFile 但它似乎没有正确安装 我使用的是Windows 7 不久前 我编写了一个 Thumbn
  • 这些 Linux 内核 Oops 字段的含义是什么?

    我在开发人员的生活中已经遇到过一些 Oops 虽然我熟悉可以从这些 Oops 中检索到的一些信息 但仍然有一些信息我无法理解 因此无法用来解决问题 下面您将找到一个 Oops 示例 我将描述我可以从中推断出什么 然后 我会问剩下的信息可以告
  • Django在syncdb时以自定义方式初始化数据库

    我在开发过程中使用 Django 令人烦恼的是 每次我对模型进行一点更改时 我都需要删除数据库并运行syncdb 为了测试的目的 我想每次运行syncdb时自动将一些初始数据添加到数据库中 我尝试将这些代码放入一个应用程序中 init py
  • bash:如何在没有 date -d 选项的情况下比较 Solaris 上的两个日期

    我试图将日志文件行中输入的日期与昨天的日期进行比较 如果差异超过一天 则它会打印日志文件中的该行 日志档案 more ActiveX2Alarms log 2016 09 30 01 40 14 MET faultManager netwo