鉴于两个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 module将文件解析为字典,合并它们并将它们写回。但是,我觉得在shell中应该有一个简单的解决方案可以解决third-party module这样一个基本任务。
回答
好吧,所以我最终使用了
$ sort -u -t '=' -k 1,1 file1 file2 | grep -v '^$\|^\s*\#' > file3
省略空行和注释。尽管如此,提出的awk
解决方案效果还不错。
分析解答
另一种非常简单的方法是使用sort:
sort -u -t '=' -k 1,1 file1 file2 > file3
导致file1中的键优先于file2中的键的文件。