Shell-Script
使用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
您可以
awk
同時使用時間戳來提取它們,然後以yyyy-mm-dd hh:MM:ss
格式排列時間戳,將它們轉換為紀元時間,date --date='2021/05/18 21:00:22' +"%s"
然後比較紀元時間以查看哪個更大。
你沒有說如果比較失敗會發生什麼,但是給出
$ 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 和Time::Piece模組:
$ 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
.