用于合并具有重复键的dotenv文件的Shell脚本

时间:2019-08-28 11:39:14

标签: shell environment-variables

给出两个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

省略空白行和注释。尽管如此,建议的awk解决方案也可以正常工作。

2 个答案:

答案 0 :(得分:1)

使用简单的awk脚本:

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

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

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

答案 1 :(得分:1)

另一种非常简单的方法是使用sort:

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

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