Как объединить INI-файл с переопределением файла - PullRequest
0 голосов
/ 26 октября 2019

Я ищу способ, в идеале, в bash объединить два INI-файла. Вот подробности. У меня есть один файл, который содержит «значения по умолчанию», а другой, который просто указывает строки, которые должны быть изменены.

, например, у нас есть файл default.ini, который содержит значения по умолчанию:

[foo]
bar=1
baz=2

Затем у нас есть отдельный файл overrides.ini, который содержит «переопределения»:

bar=10

В итоге я хочу получить:

[foo]
bar=10
baz=2

patch сразу пришло в голову, но я не могу заставить это работать, если overrides.ini не имеет ВСЕ значения в default.ini с измененным bar (в этом случае я мог бы также просто использовать overrides.ini)

join Казалось, вариант, пока я не увидел требование, что входные файлы должны быть отсортированы, что не представляется возможным в моей ситуации.

1 Ответ

0 голосов
/ 26 октября 2019

Если это единственная bar в default.ini, вы можете использовать awk:

$ awk -F= 'NR==FNR{a[$1]=$0;next}($1 in a){$0=a[$1]}1' overrides default

Выход:

[foo]
bar=10
baz=2

Объяснено:

$ awk -F= '              # = is the delimiter
NR==FNR {                # process overrides file
    a[$1]=$0             # hash record, first field is the key
    next                 # process next override entry
}
($1 in a) {              # if ini entry is found in a hash
    $0=a[$1]             # replace with that
}1' overrides default    # output, mind the file order
...