UNIX의 특정 위치에 있는 파일의 날짜(30일 단위)를 업데이트하는 방법은 무엇입니까?

UNIX의 특정 위치에 있는 파일의 날짜(30일 단위)를 업데이트하는 방법은 무엇입니까?

UNIX의 특정 위치에 있는 파일의 날짜(30일 단위)를 업데이트하는 방법은 무엇입니까? awk나 sed가 도움이 될까요?

파일 형식은 다음과 같습니다 -

Thomson: xyz
형식: 1
문자 세트: ASCII8
파일 유형: 이벤트 파일
파일 하위 유형: mobile_call
파일 그룹 번호: 1
그룹 내 파일 번호: 1 그룹 내 총 파일 수
: 19
소스 ID: 소스
태그: tag-v13

이 파일은 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:

위 파일에서 "Event:"로 시작하는 줄로 이동하여
"2014/01/03-13-00-00.00" 날짜를 30일까지 업데이트해야 합니다(시간이 남아 있는 동안 날짜만 업데이트하면 됩니다). 똑같다 )).
디렉토리에는 20,000개의 파일이 있으며 이러한 파일의 날짜를 업데이트해야 합니다.

답변1

perl이 모듈을 사용하면 Date::Manip다음을 수행할 수 있습니다.

 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...

답변2

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

Event:줄 의 경우 substr날짜 형식을 찾아 match변수에 넣습니다 d. 그런 다음 문자열에서 for 및 stitute by를 사용하는 대신 시스템 date명령을 사용하여 변수를 날짜로 설정합니다 .dsd30 dayssubdds

관련 정보