用awk去除空格的同时去除空行,用grep筛选出文件1未在文件2中出现过的IP

背影:因为每天需要巡检磁盘的剩余大小,但是有时候有些服务器会采集不到磁盘的信息,因为数量比较多所以就不容易发现是那个服务器的数据没采集到,所以就写了这个脚本,下面记录分享一下awk和grep的几个参数的用法。

这个脚本的思路就是,先把全部的IP放在本地的一个文件里面,然后连接到数据库把数据取出来后存到一个文件,在用grep把没有出现过的IP输出到一个文件。在写的过程中,看着都正确但是没有对比结果出来,经测试发现是因为有空格和空行导致。

#!/bin/bash  
QUERY="select collecter_ip from XUNJIAN where time > (SELECT current_timestamp - interval ' 11 hours')  group by collecter_ip;" # 查询语句  
QUERY2="select collecter_ip,max(maxdisk) as dd from XUNJIAN where time > (SELECT current_timestamp - interval ' 11 hours') group by collecter_ip order by dd desc;"
OUTPUT_FILE="db_output.txt"
LOCAL_FILE="local_file.txt"
RESULT_FILE="result.txt"
#查询生成可以检测磁盘的ip
psql -U icp -h 2409:801e:5a03::311 -p 1521 -d icpdb -t -c "${QUERY}" > ${OUTPUT_FILE}  
#去除空格和空行
awk -i inplace '{gsub(/^[ \t]+|[ \t]+$/, ""); if (length($0) > 0) print}' ${OUTPUT_FILE}
psql -U icp -h 2409:801e:5a03::311 -p 1521 -d icpdb -t -c "${QUERY2}" > ${RESULT_FILE}

echo "未被监测到的主机:" >> ${RESULT_FILE}
#进行比对
grep -vFf  ${OUTPUT_FILE} ${LOCAL_FILE} >> ${RESULT_FILE}
#需要在单独执行一遍查询磁盘的sql生成一个文件  
# 删除临时文件(如果需要)  
rm ${OUTPUT_FILE}

#去除空格和空行
awk -i inplace '{gsub(/^[ \t]+|[ \t]+$/, ""); if (length($0) > 0) print}' ${OUTPUT_FILE}

这个主要用到的参数是 -i inplace,这个参数可以直接在原文件上进行修改。

#进行比对
grep -vFf  ${OUTPUT_FILE} ${LOCAL_FILE} >> ${RESULT_FILE}

grep用到的主要是 vfF这三个参数,下方是这三个参数的解释(我搬运的)

  1. -v:反向选择,即显示不匹配指定模式的行。换句话说,它会过滤掉包含指定模式的行,而只显示不包含该模式的行。
  2. -f FILE:从FILE中取得模式,即把FILE中的内容作为模式来搜索。这通常用于将多个模式存储在一个文件中,并一次性在目标文件中搜索这些模式。
  3. -F:将模式视为固定字符串而非正则表达式。这意味着grep会按照字面意义来匹配字符串,而不是尝试将其解析为正则表达式。这在搜索不包含特殊字符的字符串时很有用,因为它可以提高搜索速度并避免由于正则表达式解析导致的错误。
  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值