![差异比较并输出到单独的文件](https://linux22.com/image/161888/%E5%B7%AE%E5%BC%82%E6%AF%94%E8%BE%83%E5%B9%B6%E8%BE%93%E5%87%BA%E5%88%B0%E5%8D%95%E7%8B%AC%E7%9A%84%E6%96%87%E4%BB%B6.png)
我想将多个文件与单个主文件进行比较并将其保存到单独的文件中,并且我还希望一个 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
上面的 an 。这段代码假设没有问题:它不检查是否发生了其他错误。
您可以轻松地将程序打印的消息更改为 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