2つのyamlファイルを比較する

yamlファイルの差分をエビデンスとして残したいような機会があったので、やり方を残しておきます。

メモ
diffだとダメなの…?
→ 差分のある行しか表示されず、「これって何だっけ?」となるのでダメ


実行環境

Mac

準備

事前にyqを入れておきます

$ brew install yq

注意
pip installで入れたyqと使い方が異なります。

手順

例として、「sample1.yaml」「sample2.yaml」の2ファイルを比較するものとしてコマンドを記載します

path1:
  path2:
    key1: value1
    key2: value2
path1:
  path2:
    key1: value1
    key3: value3

yamlファイルを変換

以下のコマンドでproperties形式に変換します。

$ yq eval '.. | select((tag == "!!map" or tag == "!!seq") | not) | (path | join(".")) + "=" + .' sample1.yaml | sort > sample1.properties
$ yq eval '.. | select((tag == "!!map" or tag == "!!seq") | not) | (path | join(".")) + "=" + .' sample2.yaml | sort > sample2.properties

これで

path1:
  path2:
    key1: value1
    key2: value2

このyamlが

path1.path2.key1=value1
path1.path2.key2=value2

こうなります。

diffで比較

1で出力したファイルをdiffで比較します

$ diff sample1.properties sample2.properties
2c2
< path1.path2.key2=value2
---
> path1.path2.key3=value3

わかりやすい✨

余談

ちなみに元のファイルで比較すると

$ diff sample1.yaml sample2.yaml
4c4
<     key2: value2
---
>     key3: value3

なんのkeyだ。。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です