awk 循环过滤脚本

#!/bin/bash
# 逐行匹配文件中的内容,进行输出
# $1
邮件中的EPC巡检告警内容文件 $2 控制台导出的文件列表.scv $3 过滤后要保存的文件名
if [ $# -ne 3 ];then
    echo "USAGE UTF-8: $0 <邮件中的EPC巡检告警内容文件>   <导出的EPC列表文件>  <过滤后要保存的文件名>"
    exit
fi

for SN in $(awk '{print $5}' $1)
    do
       # -F 定义分隔符 使用shell变量用 "'变量名'" 
       awk -F ',|"'  '/"'$SN'"/{ print $1,$4,$6 }'  $2 >> $3
    done
search_count=`awk '{print $5}' $1 | wc -l`
find_count=`cat $3| wc -l`
if [ $search_count -eq $find_count ];then
    echo -e "\033[32;1mAll searches found , Sum : ${search_count}    Please See $3 \033[0m"
else
    echo -e "\033[31;1mSearch Count ${search_count} ; Found  ${find_count}   Please See $3 \033[0m"
fi

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

:"'$var'"

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

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=================

猜你喜欢

转载自www.cnblogs.com/zhangmingda/p/12455216.html