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
명령을 사용하여 변수를 날짜로 설정합니다 .ds
d
30 days
sub
d
ds