Bash 用于查找文件中缺少哪个服务器的脚本?
Bash script to find which server is missing from the file?
我对 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
我尝试了几种不同的脚本,none 对我有用。我尝试在单独的脚本中完成所有不同的步骤,希望我能让事情相对简单。这个对我来说很有意义,但它不会 return 任何东西。非常感谢任何帮助。
#!/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 更熟悉。我有点意外地被扔进了这份工作:/
提前致谢!!
这应该有效:
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
试试这个:
(cat cmdb_ci_linux_server.csv |
awk 'BEGIN{FS=","}{print substr(,2,length()-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
左边的数字:表示找到的次数
我对 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
我尝试了几种不同的脚本,none 对我有用。我尝试在单独的脚本中完成所有不同的步骤,希望我能让事情相对简单。这个对我来说很有意义,但它不会 return 任何东西。非常感谢任何帮助。
#!/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 更熟悉。我有点意外地被扔进了这份工作:/
提前致谢!!
这应该有效:
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
试试这个:
(cat cmdb_ci_linux_server.csv |
awk 'BEGIN{FS=","}{print substr(,2,length()-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
左边的数字:表示找到的次数