无处理中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. Devs--开源规则引擎介绍

    Devs Devs是一款轻量级的规则引擎. 开源地址:https://github.com/CrankZ/devs 基础概念 此规则引擎的基础概念有字段.条件.规则等. 其中字段组成条件,条件组成规则 ...

  2. FASTA/Q序列处理神器---seqkit

    该软件对于处理FASTA/Q十分方便,省去自己编写脚本 安装 1 conda install seqkit 使用 序列操作(seq) 1 ## 取方向序列 2 seqkit seq test.fa - ...

  3. 50. Plus One-Leetcode

    Plus One My Submissions QuestionEditorial Solution Total Accepted: 98403 Total Submissions: 292594 D ...

  4. 论文解读(SDNE)《Structural Deep Network Embedding》

    论文题目:<Structural Deep Network Embedding>发表时间:  KDD 2016 论文作者:  Aditya Grover;Aditya Grover; Ju ...

  5. 表格合并单元格【c#】

    gridBranchInfo.DataSource = dtBranchViewList; gridBranchInfo.DataBind(); Random random = new Random( ...

  6. 学习java的第六天

    一.今日收获 1.开始了学习手册第二章的学习 2.了解了java里的常量与变量以及数据类型,与c语言的内容类似 二.今日难题 1.都是基础知识,没有什么难题 三.明日目标 1.继续学习java学习手册 ...

  7. idea 启动debug的时候throw new ClassNotFoundException(name)

    idea 启动debug的时候throw new ClassNotFoundException(name) 启动debug就跳转到此界面 解决办法 这个方法只是忽略了抛异常的点,并没有真正解决问题.后 ...

  8. HTTP请求 Java API

    1.导入依赖 <dependency> <groupId>commons-httpclient</groupId> <artifactId>common ...

  9. 【leetcode】653. Two Sum IV - Input is a BST

    Given the root of a Binary Search Tree and a target number k, return true if there exist two element ...

  10. C++之数组转换

    题目如下: 这道题经过好久的思考也没找到能一次性输入两组数的方法,只能一次性处理一组数,所以就把代码放上来,欢迎交流留言一起讨论可以放两组数的方法~(QQ 841587906) 1 #include ...