使用Bash脚本查找文件中缺少的服务器?

时间:2015-04-28 16:25:01

标签: linux bash shell csv scripting

我是BASH脚本的新手。我希望有人可以提供帮助。我有两个文件。文件1是包含某些服务器属性的.csv文件。

cmdb_ci_linux_server.csv

"CLS000","csl000","Linux SuSe","9","HP"
"CLS001","cls001","Linux SuSe","9","VMware, Inc."
"CLS002","cls002","Linux Red Hat","5.11","VMware, Inc."
...
"VSRQ1CS1","vrsq1cs1","Linux SuSe","11","VMware, Inc."

这些是已签出的服务器。我需要将它与所有服务器的列表进行比较,并找出尚未检查的服务器。所有服务器的列表都采用以下格式: HOSTS.TXT

cls000
cls001
cls002
cls003
cls004
cls005
...
cls499

我尝试了一些不同的脚本,没有一个适合我。我尝试在单独的脚本中执行所有各个步骤,希望我能保持相对简单的事情。这个对我有意义,但它不会返回任何东西。非常感谢任何帮助。

#!/bin/bash

while IFS="," read name host_name os os_version manufacturer
do
cat cmdb_ci_linux_server.csv

cat hosts.txt

grep -vf cmdb_ci_linux_server.csv hosts.txt

done

我知道我的方式围绕Linux,但不是很好。我更熟悉windows。我竟然意外地投入到这份工作中:/

提前致谢!!

2 个答案:

答案 0 :(得分:0)

这应该有效:

while  read line
do
IFS=","
arr=($line)
text=${arr[1]//\"/""}
[[ $(grep $text hosts.txt -c) -le 0 ]] && echo "$text: Not Matched"
done <cmdb_ci_linux_server.csv 

答案 1 :(得分:0)

试试这个:

(cat cmdb_ci_linux_server.csv | 
 awk 'BEGIN{FS=","}{print substr($2,2,length($2)-2)}'|
 sort | uniq;
 cat hosts.txt | sort | uniq) | sort | uniq -c

示例结果:

  

1 cls000

     

2 cls001

     

2 cls002

     

1 cls003

     

1 cls004

     

1 cls005

     

1 csl000

左数:表示找到的发生次数