次の変数を含む「conf1」というファイルがあります。
name='john'
last=''
custom='1000'
他のファイルの名前はconf2で、次のようになります。
name='john'
last='star'
1つのファイルにマージしたいのですが、マージされたファイルにはインポートされたのと同じ順序で変数が含まれています。
たとえば、最初にconf1を取得してからconf2を取得すると、conf2の変数はconf1を上書きします。しかし、conf2にない変数もあります。
一意で最後のソースである変数のみを含む1つのファイルをマージして生成したいと思います。
希望の出力:conf3
name='john'
last='star'
custom='1000'
可能ですか?
ベストアンサー1
次のことができます。
$ awk -F= '{l[$1]=$0};END{for (i in l) print l[i]}' conf1 conf2
custom='1000'
last='star'
name='john'
出力の行の順序は保証されていませんが(awk
配列がハッシュテーブルに内部的に格納される方法に応じて)、設定の優先順位がconf2
優先されますconf1
。
どこ
awk -F= ... conf1 conf2
=
conf ファイルで区切り文字で awk を呼び出します。{l[$1]=$0}
各変数の定義を保存します。最新の変数が最も古い変数を上書きします。END{ ... }
最後に(すべてのファイルを処理した後)for (i in l)
すべての変数を繰り返します。print l[i]
そして印刷してください。