在文件夹中存在的多个文件中动态地将日期部分替换为当前日期 -15 天
Replace a date part with current date -15 days dynamically in multiple files present in a folder
我完全是 unix 的新手。有人可以帮我解决一个 *(星号)分隔文件有多行以 RTG 开头和第 3 列 = TD8 我想对日期部分进行子字符串化和
我想用当前日期减去 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 = "*"
}
== "RTG" && == "TD8" {
gsub(/[0-9]{8}/, NewDate, )
}
1' file
但我想将它应用于目录中的所有文件。
如果第四列只有日期,您可以用新日期替换每组 8 位数字:
awk -v "NewDate=$(date -d '-15 days' +'%Y%m%d')" '
BEGIN {
FS = OFS = "*"
}
== "RTG" && == "TD8" {
gsub(/[0-9]{8}/, NewDate, )
}
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 = "*"
}
== "RTG" && == "TD8" {
gsub(/[0-9]{8}/, NewDate, )
}
1' "$f" > .tmpfile && mv .tmpfile "$f"
done
我完全是 unix 的新手。有人可以帮我解决一个 *(星号)分隔文件有多行以 RTG 开头和第 3 列 = TD8 我想对日期部分进行子字符串化和 我想用当前日期减去 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 = "*"
}
== "RTG" && == "TD8" {
gsub(/[0-9]{8}/, NewDate, )
}
1' file
但我想将它应用于目录中的所有文件。
如果第四列只有日期,您可以用新日期替换每组 8 位数字:
awk -v "NewDate=$(date -d '-15 days' +'%Y%m%d')" '
BEGIN {
FS = OFS = "*"
}
== "RTG" && == "TD8" {
gsub(/[0-9]{8}/, NewDate, )
}
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 = "*"
}
== "RTG" && == "TD8" {
gsub(/[0-9]{8}/, NewDate, )
}
1' "$f" > .tmpfile && mv .tmpfile "$f"
done