在文件夹中存在的多个文件中将日期部分动态替换为当前日期 -15 天
Posted
技术标签:
【中文标题】在文件夹中存在的多个文件中将日期部分动态替换为当前日期 -15 天【英文标题】:Replace a date part with current date -15 days dynamically in multiple files present in a folder 【发布时间】:2019-09-21 06:31:40 【问题描述】:我是 unix 的新手。。有人可以帮我解决一个 *(star) 分隔文件的要求,它有多行以 RTG 开头,第 3 列 = TD8 我想将日期部分和 我想用 currentdate 减去 15 天替换。这是一个例子。我正在使用 AIX 服务器
$ cat temp.txt
RTG*888*TD8*20180201~
TWW*888*RD8*20180301-20180301~
RTG*888*TD8*20180401-20180501~
KCG*888*TD8*20180101-20180201~
我希望通过更改日期得到如下输出。请帮忙。我正在寻找 UNIX 脚本以使其适用于该目录中存在的所有文件
RTG*888*TD8*20190417~
TWW*888*RD8*20180201-20180201~
RTG*888*TD8*20190417-20190417~
KCG*888*TD8*20180201-20180201~
这适用于单个文件:
awk -v "NewDate=$(TZ=GMT+100 date +%Y%m%d)" '
BEGIN
FS = OFS = "*"
$1 == "RTG" && $3 == "TD8"
gsub(/[0-9]8/, NewDate, $4)
1' file
但我想将它应用于目录中存在的所有文件。
【问题讨论】:
with currentdate minus 15 days
??诶!预期的输出没有多大意义
问题发布日期(20190502) - 15 天 =(20190417) 我想用这个日期替换
@oguz ismail,您共享的脚本运行良好,但我想将其应用于目录中存在的所有文件。请帮我修改脚本
@anil 原来 aix 没有 gnu 日期,那它是如何工作的呢?
@oguz ismail,我做了一些小的修改来获得 - 15 天,它就像那样工作。请帮助我修改目录中的所有文件并将其写回相应的文件
【参考方案1】:
如果第四列中只有日期,您可以将每组 8 位数字替换为新日期:
awk -v "NewDate=$(date -d '-15 days' +'%Y%m%d')" '
BEGIN
FS = OFS = "*"
$1 == "RTG" && $3 == "TD8"
gsub(/[0-9]8/, NewDate, $4)
1' file
根据您的示例,其输出如下:
RTG*888*TD8*20190418~
TWW*888*RD8*20180301-20180301~
RTG*888*TD8*20190418-20190418~
KCG*888*TD8*20180101-20180201~
要将其应用于目录中的所有文件,请使用 for 循环和临时文件:
for f in directory/*; do
awk -v "NewDate=$(date -d '-15 days' +'%Y%m%d')" '
BEGIN
FS = OFS = "*"
$1 == "RTG" && $3 == "TD8"
gsub(/[0-9]8/, NewDate, $4)
1' "$f" > .tmpfile && mv .tmpfile "$f"
done
【讨论】:
错误:日期:非法选项 --d 用法:日期 [-u] [+字段描述符] 我正在使用 AIX Aix!date 知道的比 Gnu!date 还少。这是一个可能的替代品:pldate sub-days 15
来源:github.com/lzsiga/pldate
@oguz ismail 提供的脚本仅适用于一个文件,并且仅在黑屏中显示操纵的数据内容。如何使其适用于目录中存在的所有文件并将其写回各自的文件
你太棒了..它按预期工作..非常感谢您的时间和支持@oguz ismail以上是关于在文件夹中存在的多个文件中将日期部分动态替换为当前日期 -15 天的主要内容,如果未能解决你的问题,请参考以下文章