awk 循环过滤EPC脚本
无处理中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 定义数组变量进行统计
awk -F'default/' '{print $2}' 12.13-top100.txt | awk -F'/' '{print $1,$2}' | awk '{a[$1]+=$3} END{for(i in a)printf "%s\t %d\n",i,a[i]}' | sort -rn -k 2
统计原始文本,需求:筛出default/XXXX 相同的XXX后面数字统计总和
newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/7b2cf273a85d4dc390a402337d1056c7/1200.m3u8 202281 newcntv.qcloudcdn.com/asp/hls/850/0303000a/3/default/7f406e44841e4e688bf47f21c358aa9c/0.ts 186119 newcntv.qcloudcdn.com/asp/hlsaudio/hls/850/0303000a/3/default/6c008a45ea2c4a7b92feb1bc04f7e37e/0.ts 145846 newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/822bfac2560e45c8a786b66dcd20be10/1.ts 134562
posted on 2020-03-10 13:40 zhangmingda 阅读(240) 评论(0) 编辑 收藏 举报