我有一个小的 awk 脚本,它可以进行一些就地文件修改(对 Java.properties
文件,给你一个想法)。这是影响大量用户的部署脚本的一部分。
我希望能够设置默认值,将文件的其余部分保留在用户的偏好中。这意味着如果缺少配置行,则附加配置行,如果存在则对其进行修改,其他所有内容保持不变。
目前我使用这样的东西:
# initialize
BEGIN {
some_value_set = 0
other_value_set = 0
some_value_default = "some.value=SOME VALUE"
other_value_default = "other.value=OTHER VALUE"
}
# modify existing lines
{
if (/^some\.value=.*/)
{
gsub(/.*/, some_value_default)
some_value_set = 1
}
else if (/^other\.value=.*/)
{
gsub(/.*/, other_value_default)
other_value_set = 1
}
print $0
}
# append missing lines
END {
if (some_value_set == 0) print some_value_default
if (other_value_set == 0) print other_value_default
}
尤其是当我要控制的行数变大的时候,这就越来越麻烦了。我的 awk 知识并不是那么好,上面的内容只是感觉不对 - 我该如何简化呢?
PS:如果可能的话,我想留在awk。请不要只推荐使用 Perl/Python/whatever 会容易得多。:-)