Como faço para atualizar as datas (por 30 dias) nos arquivos que vão para aquele local específico no unix?

1

Como faço para atualizar as datas (até 30 dias) nos arquivos que vão para esse local específico no unix? Pode awk ou sed ajudar?

O formato do arquivo é o seguinte -

Thomson: xyz
Formato: 1
Character_set: ASCII8
File_type: event_file
File_subtype: mobile_call
File_group_number: 1
File_in_group_number: 1
Total_files_in_group: 19
Source_ID: source
Tag: tag -v13

Este arquivo produzido por GTFplaintext 0.1:

Event: "61765","1","2014/01/03-13-00-00.00",,"GBP",,,,,,,,,,"61765","0345351816","1407",,,,,,,,,,,,,,,,,,,,,
Footer: text_data_transfer_file
AuditValue_1: 1
AuditValue_2: 0
End: text_data_transfer_file
Lines: 15
Characters: 351
Checksum:
Security_checksum:
End_of_file:

No arquivo acima, preciso ir para a linha que começa com 'Event:' e atualizar a data.  "2014/01 / 03-13-00-00.00" por 30 dias (somente a data precisa ser atualizada, enquanto o tempo pode permanecer o mesmo).
Existem 20k desses arquivos em um diretório, para o qual as datas precisam ser atualizadas.

    
por Unix_Novice 11.03.2015 / 13:05

2 respostas

1

Com o perl e o módulo Date::Manip , você poderia fazer:

 perl -MDate::Manip -pi -e 's|^Event.*?"\K\d{4}/\d\d/\d\d|
   UnixDate(DateCalc("$&", "30 days later"), "%Y/%m/%d")|e' file1 file2...
    
por 11.03.2015 / 13:48
0
awk '
  /^Event:/{
    d=substr($0,match($0,"[0-9]{4}(/[0-9]{2}){2}"),RLENGTH)
    "date +\"%Y/%m/%d\" -d \""d" 30 days\""|getline ds
    sub(d,ds)
    }
  1' file

Para linhas que começam no formato de data Event: find substr ing match ing e inserem na variável d . Em seguida, use o comando date do sistema para definir a variável ds como a data mais de d para 30 days e sub stitute d por ds na cadeia de caracteres.

    
por 11.03.2015 / 14:14