【问题标题】:Shell script for merging dotenv files with duplicate keys用于合并具有重复键的 dotenv 文件的 Shell 脚本
【发布时间】:2020-01-01 15:09:03
【问题描述】:

给定两个 dotenv 文件,

# file1
FOO="X"
BAR="B"

# file2
FOO="A"
BAZ="C"

我要跑步

$ ./merge.sh file1.env file2.env > file3.env

得到以下输出:

# file3
FOO="A"
BAR="B"
BAZ="C"

到目前为止,我使用python-dotenv 模块将文件解析为字典,将它们合并并写回。但是,我觉得 shell 中应该有一个简单的解决方案,让自己摆脱第三方模块来完成这样的基本任务。


回答

好的,所以我最终使用了

$ sort -u -t '=' -k 1,1 file1 file2 | grep -v '^$\|^\s*\#' > file3

省略空行和 cmets。不过,建议的awk 解决方案同样有效。

【问题讨论】:

标签: shell environment-variables


【解决方案1】:

另一个相当简单的方法是使用排序:

sort -u -t '=' -k 1,1 file1 file2 > file3

产生一个文件,其中来自 file1 的键优先于来自 file2 的键。

【讨论】:

    【解决方案2】:

    使用简单的 awk 脚本:

    awk -F= '{a[$1]=$2}END{for(i in a) print i "=" a[i]}' file1 file2
    

    这会将所有键值存储在数组a 中,并在解析两个文件时打印数组内容。

    file2 中的键会覆盖 file1 中的键。

    【讨论】:

      【解决方案3】:

      仅添加来自 file2 的新值,而不覆盖来自 file1 的初始值。省略文件 2 中的空格。

        grep "\S" file2  >> file1
        awk -F "=" '!a[$1]++' file1 > file3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 1970-01-01
        • 2019-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        相关资源
        最近更新 更多