如何更新 UNIX 中特定位置的文件中的日期(按 30 天)? awk 或 sed 可以帮忙吗?
文件格式如下 -
Thomson:xyz
格式:1
字符集:ASCII8
文件类型:事件文件
文件子类型:mobile_call
文件组编号:1
文件组内编号:1 组内文件
总数:19
源 ID:源
标签:标签 -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 天(仅需要更新日期,而时间可以保持不变) )。
目录中有 20k 个这样的文件,必须更新这些文件的日期。
答案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:
对于从find substr
ing日期格式开始match
并放入变量 中的行d
。然后使用系统date
命令将变量设置ds
为日期,而不是在字符串中使用d
for30 days
和sub
stitute d
by 。ds