每天增加配置文件中的回顾值 +1

每天增加配置文件中的回顾值 +1

我有一个需要每天增加的配置文件。

例如

report.lookback.days.to.retrieve.data=60

该文件包含多个条目,例如上面包含不同值的条目。我需要打开属性文件搜索此特定条目,并每天将值增加 +1,总共 30 天。

例如

report.lookback.days.to.retrieve.data=61

report.lookback.days.to.retrieve.data=62

report.lookback.days.to.retrieve.data=63

我是脚本编写新手,我不确定什么方法可以完成这项任务。

我应该使用 awk、sed、实现计数器还是方法的组合?

答案1

如果您只想编辑看起来像您发布的内容的文件,请使用类似

perl -i  -pe 's/report.lookback.days.to.retrieve.data=\K\d+/$&+1/e' file

解释

启用-i就地编辑,因此更改将保存到原始文件中,-p意味着“执行 -e 给出的任何脚本后打印每一行”/

s///替换运算符,其工作方式类似于s/source/replacement

report.lookback.days.to.retrieve.data=使用的正则表达式是查找后跟一个或多个数字的字符串( \d+)。丢弃\K之前匹配的任何内容,允许$&(这是一个特殊变量,保存刚刚匹配的内容)单独指向数字。

最后,我们将其替换为$&+1,匹配的值加一。这(评估s///运算符内的某些内容)是由s///e. 末尾的标志激活的s///e

答案2

如果您只想每天就地编辑文件(您可能不想这样做),您可以执行以下操作:

$ echo 'report.lookback.days.to.retrieve.data=61' \
    | awk -F= '
        /report.lookback.days.to.retrieve.data/{
            printf("%s=%d\n", $1, $2+1)
        }
    '
report.lookback.days.to.retrieve.data=62

但这需要保存到临时文件,然后每次都替换原始文件。如前所述devnull,最好将值替换为$vars并使用参数调用脚本。

答案3

使用 执行此操作非常简单awk,但是标准方法是输出到临时文件,然后替换原始文件,使用 Linuxmktemp您可以执行以下操作:

tempfile=$(mktemp --tmpdir=.)
awk -F= '{
  if($1=="report.lookback.days.to.retrieve.data")
    print $1"="$2+1
  else
    print
  }' in_file >"$tempfile"
mv "$tempfile" in_file

某些版本awk具有-i(就地)选项,这意味着您可以执行以下操作:

awk -iF= '{
  if($1=="report.lookback.days.to.retrieve.data")
    print $1"="$2+1
  else
    print
  }' in_file

或者如果sponge实用程序(部分更多实用程序)可用:

awk -F= '{
  if($1=="report.lookback.days.to.retrieve.data")
    print $1"="$2+1
  else
    print
  }' in_file |
sponge in_file

当然,如果输入文件除了您想要增加的行之外不包含任何其他行(或者如果包含并且您只想删除它们),则awk可以简化该部分。

相关内容