2

これは主にアプローチ/コンセプトに関する質問であり、ご意見をお寄せいただければ幸いです。

問題: プロパティ ファイルを比較および編集する必要があることがよくあります。その際、古いファイルと比較して、新しいファイルに存在する新しいプロパティを見つけることに主な関心があります。これを実現するために、私はしばしば を使用diff old_file.prop new_file.propしますが、各ファイルの行/プロパティの数が多い (~150) ため、この方法は効率的ではなく、エラーが発生しやすくなります。

サンプルold_file.prop:

name.host=mycomputer1
internal.port=21
external.gateway=sample.my.machine

サンプルnew_file.prop:

name.host=change_me
internal.port=21
external.gateway=change_me
external.port=501

ここでdiff、コマンドは次を返します。

<name.host=mycomputer1
<external.gateway=sample.my.machine
>name.host=change_me
>externa.gateway=change_me
>external.port=501

この例での対象/目的の唯一の出力はexternal.port、それが保持する値 (およびおそらく行番号も) ではありません。私は に少し慣れてsedいますが、新しいファイルのプロパティに関する事前の知識がなければ、これを行うことはできないと思います。

bash スクリプトを使用してこれを効率的に達成する方法はありますか?

ありがとうございました、

4

3 に答える 3

4

GNU のコード:

awk -F= 'NR==FNR {a[$1]++;next}; !a[$1] {print $1, "line", FNR}' fileOld fileNew
于 2013-07-08T21:38:44.650 に答える
2

@mobの回答の代替として、および他のいくつかの可能性を与えるために:

  1. new_file で削除されたプロパティを表示するには

    comm -23 <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

  2. new_file に追加されたプロパティを表示するには

    comm -13 <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

  3. 2 つのファイルに共通のプロパティを表示するには

    comm -22 <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

于 2013-07-08T21:39:23.047 に答える
1

各行cutの最初の後の入力を無視するために使用できます。=

diff <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

予測出力:

22a23
> external.port
于 2013-07-08T21:14:55.423 に答える