ファイルのタイムスタンプBase64の値を変更する

ファイルのタイムスタンプBase64の値を変更する

問題があります。次の内容を含む test.txt ファイルがあります。

dn: serv=CSPS,mscId=167e48dc2b7a42d4acce611c8b477262,ou=multiSCs,dc=three
structuralObjectClass: CP1
objectClass: CP1
objectClass: CUDBServiceAuxiliary
objectClass: CP2
objectClass: CP3
objectClass: CP4
objectClass: CP5
objectClass: CP6
UNKNLOCDATECS:: FQsJ
UNKNLOCDATEPS:: FgMe
ISTTIMESTAMP:: FgMIDyI7
CSULTIME:: HgMWCzYo
CSLOCTIME:: AQQWBA0R
PSULTIME:: HgMWDBco
PSLOCTIME:: HgMWDBco
SCHAR:: AgA=
ICS: 1
CAT: 10
DBSG: 1
OFA: 1
SOCB: 1
PWD: 0000
PWDC: 0
SOCFB: 0

CSULTIME:: および CSLOCTIME:: テキストが見つかるたびに、このテキストの後ろの値を次の関数で置き換えて、対応するタイムスタンプを認識された形式にデコードしたいと思います(1つのファイルスキャンでこれら2つの値を置き換えることができる場合は、効果が良いです)8GBファイルについて話していますが、どちらの場合も機能は同じです。

base64 -d | hexdump -v -e '1/1 "%02d" ' | awk 'BEGIN {FS = ""} {print "20" $5 $6 "-" $3 $4 "-" $1 $2 " " $7 $8 ":" $9 $10 ":" $11 $12}'

Unixでこれら2つの値をエコーすると:

For CSULTIME the result would be 2022-03-30 11:54:40: echo -n "HgMWCzYo" | base64 -d | hexdump -v -e '1/1 "%02d" ' | awk 'BEGIN {FS = ""} {print "20" $5 $6 "-" $3 $4 "-" $1 $2 " " $7 $8 ":" $9 $10 ":" $11 $12}'
For CSLOCTIME the result would be 2022-04-01 04:13:17: echo -n "AQQWBA0R" | base64 -d | hexdump -v -e '1/1 "%02d" ' | awk 'BEGIN {FS = ""} {print "20" $5 $6 "-" $3 $4 "-" $1 $2 " " $7 $8 ":" $9 $10 ":" $11 $12}'

したがって、ファイルは次のCSULTIMEとCSLOCTIMEの値で終わります。

dn: serv=CSPS,mscId=167e48dc2b7a42d4acce611c8b477262,ou=multiSCs,dc=three
    structuralObjectClass: CP1
    objectClass: CP1
    objectClass: CUDBServiceAuxiliary
    objectClass: CP2
    objectClass: CP3
    objectClass: CP4
    objectClass: CP5
    objectClass: CP6
    UNKNLOCDATECS:: FQsJ
    UNKNLOCDATEPS:: FgMe
    ISTTIMESTAMP:: FgMIDyI7
    CSULTIME:: 2022-03-30 11:54:40
    CSLOCTIME:: 2022-04-01 04:13:17
    PSULTIME:: HgMWDBco
    PSLOCTIME:: HgMWDBco
    SCHAR:: AgA=
    ICS: 1
    CAT: 10
    DBSG: 1
    OFA: 1
    SOCB: 1
    PWD: 0000
    PWDC: 0
    SOCFB: 0

私が試したsedの組み合わせが動作しないので、私は完全に迷子になりました。

よろしくお願いします! ! ! !

ベストアンサー1

私は次のことをします:

perl -MMIME::Base64 -pe 's{^[^:]*TIME:\K: (\S+)}{
  my ($d, $m, $y, @t) = unpack "C*", decode_base64 $1;
  sprintf "20%02d-%02d-%02d %02d:%02d:%02d", $y, $m, $d, @t}e'

おすすめ記事