シェルスクリプトを使用して他のファイルの時間を比較する

シェルスクリプトを使用して他のファイルの時間を比較する

次の内容を含むファイルがあります。ここでは、HIW.ear最初の行のタイムスタンプを2行目のタイムスタンプと比較する必要があり.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

2つのタイムスタンプを使用して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

関連情報