2

creationdatetime作業中の次のテキスト ファイルがあり、2 日以上経過している場合は、オブジェクト名の値のみを解析できる必要があります。

objectname ...........................: \Path\to\file\hpvss-LUN-22May12 22.24.11\hpVSS-LUN-29Aug12 22.39.15
creationdatetime .....................: 01-Sep-2012 02:17:43
objectname ...........................: \Path\to\file\hpVSS-LUN-22May12 22.24.11\hpVSS-LUN-28Aug12 22.16.19
creationdatetime .....................: 03-Sep-2012 10:18:09
objectname ...........................: \Path\to\file\hpVSS-LUN-22May-12 22.24.11\hpVSS-LUN-27Aug12 22.01.52
creationdatetime .....................: 03-Sep-2012 10:18:33

上記のコマンドの出力は次のようになります。

\Path\to\file\hpvss-LUN-22May12 22.24.11\hpVSS-LUN-29Aug12 22.39.15

どんな助けでも大歓迎です。

プレム

4

2 に答える 2

3

での日付の解析awkは少しトリッキーですが、 を使用して実行できますmktime。月名を数値に変換するために、連想変換配列が定義されています。

パス名にはスペースが含まれているため、フィールド セパレータとして最適な選択はおそらく:(コロンの後にスペース) です。以下は、動作する awk スクリプトです。

old_than_two_days.awk

BEGIN {
  months2num["Jan"] = 1;  months2num["Feb"] =  2; months2num["Mar"] =  3; months2num["Apr"] =  4;
  months2num["May"] = 5;  months2num["Jun"] =  6; months2num["Jul"] =  7; months2num["Aug"] =  8;
  months2num["Sep"] = 9;  months2num["Oct"] = 10; months2num["Nov"] = 11; months2num["Dec"] = 12;

  now = systime()
  two_days = 2 * 24 * 3600
  FS  = ": "
}

$1 ~ /objectname/ { 
  path = $2
}

$1 ~ /creationdatetime/ {
  split($2, ds, " ")
  split(ds[1], d, "-")
  split(ds[2], t, ":")
  date           = d[3] " " months2num[d[2]] " " d[1] " " t[1] " " t[2] " " t[3]
  age_in_seconds = mktime(date)

  if(now - age_in_seconds > two_days)
    print path
}

mktime最後のブロックのすべての分割は、日付ビットを選択して、受け入れる形式に変換することです。

次のように実行します。

awk -f older_than_two_days.awk infile

出力:

\Path\to\file\hpvss-LUN-22May12 22.24.11\hpVSS-LUN-29Aug12 22.39.15
于 2012-09-03T13:24:33.647 に答える
2

私は2つのフェーズでそれを行います:

1) 入力ファイルを再フォーマットする

awk '/objectname/{$1=$2="";file=$0;getline;$1=$2="";print $0" |"file}' inputfile > inputfile2

このように対処します

01-Sep-2012 02:17:43 |  \Path\to\file\hpvss-LUN-22May12 22.24.11\hpVSS-LUN-29Aug12 22.39.15
03-Sep-2012 10:18:09 |  \Path\to\file\hpVSS-LUN-22May12 22.24.11\hpVSS-LUN-28Aug12 22.16.19
03-Sep-2012 10:18:33 |  \Path\to\file\hpVSS-LUN-22May-12 22.24.11\hpVSS-LUN-27Aug12 22.01.52

2) 日付でフィルター:

COMPARDATE=$(($(date +%s)-2*24*3600)) # 2 days off
IFS='|'
while read d f
do 
  [[ $(date -d "$d" +%s) < $COMPARDATE ]] && printf "%s\n" "$f"
done < inputfile2
于 2012-09-03T12:40:35.667 に答える