我有一个包含以下内容的文件。在这里,我需要将第一行中的时间戳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
。