Shell-Script

使用shell腳本比較不同文件的時間

  • May 19, 2021

我有一個包含以下內容的文件。在這裡,我需要將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.

引用自:https://unix.stackexchange.com/questions/650373