无处理中EPC过滤脚本
#!/bin/bash

if [ "$#" -lt 3 -o "$#" -gt 4 ];then
#if [ "$#" -lt 3 ] || [ "$#" -gt 4 ];then
echo -e "\033[31;1mUSAGE UTF-8: $0 <邮件中的EPC巡检告警内容文件> [选择SN列,default=5]\
<导出的EPC列表文件>\
<过滤后要保存的文件名>\033[0m"
exit
fi INPUT_FILE=$1
#判断参数个数寻找对应文件
if [ $# -eq 3 ];then
INPUT_COLUMN=5
TOTAL_DATA_FILE=$2
OUTPUT_FILE=$3
#源文件按照第六列降序排序,按照第五列去重
sort -k 6 -r -k 5 -u ${INPUT_FILE} -o ${INPUT_FILE}
elif [[ $# -eq 4 ]];then
INPUT_COLUMN=$2
TOTAL_DATA_FILE=$3
OUTPUT_FILE=$4
fi NOT_FOUND=0
NOT_FOUND_FILE=${OUTPUT_FILE}.NotFound #查找前清空保存的文件
> ${OUTPUT_FILE} for SN in $(awk '{print $'"$INPUT_COLUMN"'}' $INPUT_FILE)
do
# -F 定义分隔符 使用shell变量用 "'变量名'"
awk -F ',|"' '/"'$SN'"/{ print $1,"=",$4,$6,$9 }' $TOTAL_DATA_FILE >> $OUTPUT_FILE
grep $SN ${TOTAL_DATA_FILE} > /dev/null 2>&1
if [ $? -ne 0 ];then
echo -e "\033[31;1m$SN \033[0m" | tee -a $NOT_FOUND_FILE
NOT_FOUND=$(($NOT_FOUND + 1))
fi
done #判断匹配数量
search_count=`awk '{print $'"$INPUT_COLUMN"'}' $INPUT_FILE | wc -l`
find_count=`cat ${OUTPUT_FILE}| wc -l`
total_data_source=`cat ${TOTAL_DATA_FILE} | wc -l` if [ $search_count -eq $find_count ];then
echo -e "\033[32;1mAll searches found , Sum : ${search_count} Please See ${OUTPUT_FILE} \033[0m"
else
echo -e "\033[31;1mSearch Count:${search_count}; Found:${find_count} Please See ${OUTPUT_FILE} NotFound:${NOT_FOUND} See ${NOT_FOUND_FILE}\033[0m"
fi
echo -e "\033[33;1m${TOTAL_DATA_FILE} Total data sources:${total_data_source}\033[0m"

 

有处理中搜索脚本

#!/bin/bash

if [ $# -lt 4  -o "$#" -gt 5 ];then
echo -e "\033[31;1mUSAGE UTF-8: $0 <邮件中的EPC巡检告警内容文件> [SN_COLUMN default=5]\
<控制台导出ECP列表文件> \
<已提单的SN列表文件> \
<过滤后要保存的新增SN文件名>\033[0m"
exit
fi
#定义输入文件
INPUT_FILE=$1 #判断参数个数寻找对应文件
if [ $# -eq 4 ];then
INPUT_COLUMN=5
TOTAL_DATA_FILE=$2
UNDER_REPAIR_FILE=$3
OUTPUT_FILE=$4
WARNING_TYPE_COLUMN=6
#源文件第六列降序排列,按照第五列去重
sort -k 6 -r -k 5 -u ${INPUT_FILE} -o ${INPUT_FILE}
SNS=`awk '$8=="未处理" {print $'"$INPUT_COLUMN"'}' ${INPUT_FILE}` #要查找的所有SN
elif [ $# -eq 5 ];then
INPUT_COLUMN=$2
TOTAL_DATA_FILE=$3
UNDER_REPAIR_FILE=$4
OUTPUT_FILE=$5
SNS=`awk '{print $'"$INPUT_COLUMN"'}' ${INPUT_FILE}` #要查找的所有SN
fi #初始化,清空目的文件,定义输出文件
> ${OUTPUT_FILE}
NOT_FOUND_FILE=${OUTPUT_FILE}.NotFound
>${NOT_FOUND_FILE}
already_exist=0
NOT_FOUND=0 #循环匹配找修理中和待报修的
for SN in ${SNS}
do
# -F 定义分隔符 使用shell变量用 "'变量名'"
# 查找未报修的,已报修的文件中没有的才查找
if [[ ! `grep $SN ${UNDER_REPAIR_FILE}` ]]; then
WARNING_TYPE=`awk '/'"${SN}"'/{print $6}' ${INPUT_FILE}`
awk -F ',|"' '/"'$SN'"/{ print $1,"=",$4,"'${WARNING_TYPE}'",$6 }' ${TOTAL_DATA_FILE} >> ${OUTPUT_FILE} #输出一下没有找到的!同时保存一份SN到文件
grep $SN ${TOTAL_DATA_FILE} > /dev/null 2>&1
if [ $? -ne 0 ];then
echo -e "\033[31;1m$SN \033[0m" | tee -a $NOT_FOUND_FILE
NOT_FOUND=$(($NOT_FOUND + 1))
fi else
#echo $already_exist
already_exist=$(($already_exist + 1))
fi
done #判断匹配数量
search_count=`awk '{print $'"$INPUT_COLUMN"'}' ${INPUT_FILE} | wc -l`
new_search_count=`awk '$8=="未处理" {print $5}' ${INPUT_FILE}| wc -l`
has_been_restored=`awk '$8=="已恢复" {print $5}' ${INPUT_FILE}| wc -l`
find_new_count=`cat ${OUTPUT_FILE}| wc -l`
find_all_count=$((${already_exist} + ${find_new_count}))
total_data_source=`cat ${TOTAL_DATA_FILE} | wc -l` #将已报修的修理中的追加到新发现的里面
if [[ ${find_new_count} -ne 0 ]];then
echo "============Next-is-Under-Repairs-in-${UNDER_REPAIR_FILE}===========" >> ${OUTPUT_FILE}
cat ${UNDER_REPAIR_FILE} >> ${OUTPUT_FILE}
else
cat ${UNDER_REPAIR_FILE} >> ${OUTPUT_FILE}
fi #对结果进行总结输出,巡检已恢复的
echo -e "\033[32;1mrepaired:${has_been_restored}\033[0m" #输出巡检未处理的搜索结果
if [ $new_search_count -eq $find_all_count ];then
echo -e "\033[32;1mSearch Count:${search_count} All New searches found, Sum:${new_search_count}\033[0m \
\033[33;1munder_repair:${already_exist}\033[0m\
\033[31;1mNewFound:$find_new_count Please See ${OUTPUT_FILE} \033[0m"
else
echo -e "\033[31;1mSearch Count:${search_count},New searche Count:${new_search_count} Found: ${find_all_count}\033[0m \
\033[33;1munder_repair:${already_exist}\033[0m \
\033[31;1mNotFound:${NOT_FOUND} See ${NOT_FOUND_FILE}\033[0m \
\033[32;1mNewFound:${find_new_count} Please See ${OUTPUT_FILE} \033[0m"
fi
echo -e "\033[33;1m${TOTAL_DATA_FILE} Total data sources:${total_data_source}\033[0m"

查看历史修理记录

#!/usr/bin/bash
if [ $# -lt 2 -o $# -gt 3 ];then
echo -e "\033[31;1mUSAGE: $0 <历史维修记录文件> <新巡检告警的列表文件> <SN所在列数字>\033[0m"
exit
fi MAINTENANCE_HISTORY_FILE=$1
NEW_FAULT=$2 #确定SN所在列
if [ $# -eq 3 ];then
SN_COLUMN=$3
elif [ $# -eq 2 ];then
SN_COLUMN=3
fi SNS=`awk '{print $'"${SN_COLUMN}"'}' ${NEW_FAULT}`
for SN in $SNS
do
grep ${SN} ${MAINTENANCE_HISTORY_FILE} > /dev/null 2>&1
if [ $? -eq 0 ];then
maintenance_history=`awk '/'"$SN"'/{print "",$4,"请重新确认!!!"}' ${MAINTENANCE_HISTORY_FILE}`
#echo $maintenance_history
sed -i '/'"${SN}"'/s/$/'"$maintenance_history"'/' ${NEW_FAULT} fi
done

awk引用shell中变量的几种方法============================

一:"'$var'"

这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如:

for hostname in ${hostnames}; do awk -F ',|=|"' '$1=="'${hostname}'" {print $5}' epc-hosts-04.03-1936UTF-8.csv ;done
var="test"
awk 'BEGIN{print "'$var'"}'

这种写法其实就是把一对单引号分成了两段单引号,中间的shell变量直接按照shell变量的引用方式即可,但是如果var中含空格,为了shell不把空格作为分格符,便应该如下使用:

var="thisis a test"

awk 'BEGIN{print "'"$var"'"}'    (也就是在shell变量的两边加上一对双引号即可)

二:export变量,使用ENVIRON["var"]形式, (ENVIRON为awk中的内置环境变量数组)

如:

var="thisis a test";export $var

awk 'BEGIN{print ENVIRON["var"]}'

三:当然也可以使用-v选项

如:

var="thisis a test"
awk –v nvar="$var" 'BEGIN{print nvar}'

这样便把系统变量定义成了awk变量.

如果在awk是这种格式的话  awk  'script'  filename  也可以这样引用shell变量

awk 'script' awkvar="shellvar" filename
awk 'END{print awkvar}' awkvar="$shellvar" filename

============awk引用shell 变量END=================

awk 循环过滤EPC脚本的更多相关文章

  1. PHP 一个可以过滤非法脚本的函数

    这里提供一个过滤非法脚本的函数: function RemoveXSS($val) {     // remove all non-printable characters. CR(0a) and L ...

  2. shell for循环+case的脚本(监控程序状态)

    分享一个shell for循环+case的脚本(监控程序状态) 分享一个for循环+case的脚本(监控程序状态并执行相关操作) ,供大家学习参考. 复制代码代码如下: #/bin/bash set ...

  3. awk 循环语句例子

    awk 循环语句例子 运行结果:

  4. Shell awk文本处理,shell脚本编写

    Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...

  5. SpringBoot过滤XSS脚本攻击

    XSS攻击是什么 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安 ...

  6. 【快学SpringBoot】过滤XSS脚本攻击(包括json格式)

    若图片查看异常,请前往掘金查看:https://juejin.im/post/5d079e555188251ad81a28d9 XSS攻击是什么 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cas ...

  7. awk 反过滤不想要的列 和循环列

    [root@elk_m ~]# awk '{print $0}' install.log.syslog |head -1 <86>Feb 29 02:58:28 groupadd[1598 ...

  8. awk处理之案例四:sort加awk来过滤文本

    编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...

  9. 【shell实例】定时21:00-21:05,循环调用DSQL脚本,其它时段自动退出

    1.功能描述: 每日21:00定时调起test.sh,循环调起DSQL脚本test.dsql,直到21:05程序自动退出,捕获日志到相应log文件中. 2.日志文件: (1)日期.log文件中含Err ...

随机推荐

  1. 获取客户端Mac地址

    近期有个需求,需要获取客户端Mac地址作为白名单验证的依据.使用.net,B/S架构.先百度找了一些获取mac地址的方法, using System; using System.Collections ...

  2. 服务API版本控制设计与实践

    一.前言 笔者曾负责vivo应用商店服务器开发,有幸见证应用商店从百万日活到几千万日活的发展历程.应用商店客户端经历了大大小小上百个版本迭代后,服务端也在架构上完成了单体到服务集群.微服务升级. 下面 ...

  3. Codeforces 1423N - BubbleSquare Tokens(归纳+构造)

    Codeforces 题目传送门 & 洛谷题目传送门 一道思维题. 题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案.因此可以考虑采用归纳法.对于一个 ...

  4. Codeforces Round #681 (Div. 1) Solution

    A. Extreme Subtraction 把这个数组差分一下,发现操作一的作用是把 \(d_1\) 的大小分给 \(d_i\),而操作二的作用是把 \(d_i\) 减去任意值,目标是把 \(d\) ...

  5. Java设计模式之(十四)——策略模式

    1.什么是策略模式? Define a family of algorithms, encapsulate each one, and make them interchangeable. Strat ...

  6. 标准非STL容器 : bitset

    1. 概念 什么是"标准非STL容器"?标准非STL容器是指"可以认为它们是容器,但是他们并不满足STL容器的所有要求".前文提到的容器适配器stack.que ...

  7. gcc 的编译流程 和gdb的调试方法

    GCC的编译流程分为四个步骤: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 可以看的出来文件大小 gdb 调试 gdb - ...

  8. 从零构建Java项目(Maven+SpringBoot+Git) #02 奥斯丁项目

    前两天我说要写个项目来持续迭代,有好多小伙伴都表示支持和鼓励,项目的第一篇这不就来了么~我给项目取了个名字,英文名叫做:austin,中文名叫做:奥斯丁 名字倒没有什么特别的含义,我单纯觉得这个名字好 ...

  9. 生产调优3 HDFS-多目录配置

    目录 HDFS-多目录配置 NameNode多目录配置 1.修改hdfs-site.xml 2.格式化NameNode DataNode多目录配置(重要) 1.修改hdfs-site.xml 2.测试 ...

  10. 日常Java 2021/11/17

    应用程序转换成Applet 将图形化的Java应用程序(是指,使用AWT的应用程序和使用java程序启动器启动的程序)转换成嵌入在web页面里的applet是很简单的.下面是将应用程序转换成.Appl ...