複数のファイルをソースし、1つのファイルを出力します。

複数のファイルをソースし、1つのファイルを出力します。

次の変数を含む「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]そして印刷してください。

おすすめ記事