違いを比較して別々のファイルに出力

違いを比較して別々のファイルに出力

複数のファイルを単一のマスターファイルと比較して別々のファイルに保存したい、ステータス列が変更された、または変更されていないホスト名に言及するcsvファイルも必要です。急なことがあります。ここに助けが必要です。ありがとうございます。

以下は私の在庫ファイルです。

cat inventory
[routers]
iLAB-SR-12-R2 ansible_host=192.168.82.211
iLAB-SR-12-R3 ansible_host=192.168.82.212
iLAB-SR-12-R4 ansible_host=192.168.82.213

以下は私のスクリプトです。

#!/bin/bash
config_location="/etc/ansible/backups"
master="/etc/ansible/master.txt"
cd $config_location
file=`ls -l | grep "^-" | awk '{print $NF}'`
for i in $file
do
  diff -c $i $master > "/etc/ansible/difference/diff_$i"
done

上記は、複数のファイルを単一のファイルとして比較し、異なるファイル名で別の場所に保存するスクリプトです。今、クライアントは、すべてのファイルを見たくなく、ファイルに違いがあるかどうかを確認したいと言います。だから彼らはホスト名と説明を含むいくつかのcsvファイルを要求します。前任者:

Hostname comments 
host1    no changes 
host2    changes 

変更と変更は違いの比較に依存し、違いがある場合は変更されたことを意味し、差がない場合は変更されないことを意味します。コメントが変更としてのみ表示される場合、クライアントはファイルを確認します。

答え1

ファイル名が上記のホスト名に関連していると仮定すると、forループ内で次のことができます。

...
for i in $file
do 
  if diff -c $i $master > "/etc/ansible/difference/diff_$i" ;then
    echo "$i is the same as $master"
  else
    echo "$i is different from $master"
  fi
done

diffファイルが同じ場合は正常にシャットダウン(ステータス= 0)され、ファイルが異なる場合はシャットダウンに失敗(ステータス= 1)されるため、これを使用してif-else-fi上記の内容を確認できます。このコードは間違っていないと仮定します。つまり、他のエラーが発生したことを確認しません。

プログラムによって印刷されたメッセージをcsvメッセージに簡単に変更し、出力を次のファイルにリダイレクトできます。

...
echo "Hostname, comments" > output.csv
for i in $file
do 
  if diff -c $i $master > "/etc/ansible/difference/diff_$i" ;then
    echo "$i, no change"
  else
    echo "$i, some change"
  fi
done >> output.csv

関連情報