使用shell脚本比较不同文件的时间

使用shell脚本比较不同文件的时间

我有一个包含以下内容的文件。在这里,我需要将第一行中的时间戳HIW.ear与第二行中的时间戳进行比较.jars,但我已经没有关于如何执行此操作的想法了。请对此有任何帮助。 .ear 时间戳应小于所有其他 .jar 时间戳。

[rba@ci01 UAT]$ cat UAT1.txt
UAT - NODE1,May18;21:00;HIW.ear
May18;21:01;O.jar
May18;21:01;Com.jar
May18;21:01;D.jar
May18;21:01;F.jar

答案1

您可以使用awk两个时间戳来提取它们,然后以格式排列时间戳yyyy-mm-dd hh:MM:ss,将它们转换为纪元时间,date --date='2021/05/18 21:00:22' +"%s"然后比较纪元时间以查看哪个更大。

答案2

你没有说如果比较失败会发生什么,但给出

$ cat -n UAT1.txt
     1  UAT - NODE1,May18;21:00;HIW.ear
     2  May18;21:01;O.jar
     3  May18;21:01;Com.jar
     4  May18;20:59;D.jar
     5  May18;21:01;F.jar

然后使用perl,与时间::件模块:

$ perl -MTime::Piece -F';' -pe '
    if($. == 1) {
      ($s,$md) = split(/,/,$F[0]);
      $t0 = Time::Piece->strptime($md . $F[1], "%B%d%H:%M");
      next
    }
    $t = Time::Piece->strptime($F[0] . $F[1], "%B%d%H:%M");
    die "Timestamp out of order" if $t < $t0;
  ' UAT1.txt
UAT - NODE1,May18;21:00;HIW.ear
May18;21:01;O.jar
May18;21:01;Com.jar
Timestamp out of order at -e line 8, <> line 4.

请注意,从您的示例中不清楚月份说明符是否应该是%B,或者%b因为您碰巧选择了英文全名和缩写名称相同的月份。

您可以使用 GNU awk ( gawk) 做类似的事情,但您需要strptime使用字符串函数来将元素转换为适合的格式mktime

相关内容