利用awk统计话单的案例

1、  将脚本collect.sh上传至业务程序家目录$ENIP_HOME

 

2、执行下述命令赋予文件执行权限

chmod a+7 collect.sh

 

3、按照如下格式执行话单统计

   ./collect.sh 用户账号日期

   用户账号:即要统计的目标号码(没有格式要求)

   日期:格式须如20140101相同

 

4、举例说明:

<218 linux [core] :/home/test>./test.sh 861064298888 20140104                                                                                              

861064298888 Total send times is: 16380         //用户在20141008当天发送短信数量

--------------------------------------------

861064298888 Total success receive times is: 16434 //用户在20141008当天接收成功回执数量

--------------------------------------------

861064298888 Total fail receive times is: 0        //用户在20141008当天接收失败回执数量

--------------------------------------------

861064298888 Total receive times is: 16434        //用户在20141008当天接收回执总数

--------------------------------------------

861064298888 Total repeat_send times is: 0        //用户在20141008当天由于失败重复发送回执的数量

 

shell脚本如下:

#!/bin/bash
#set -x

ACCOUNT=$1
DATE=$2

SENDACCOUNT=`find ./cdr/sipmobill/bak -name "*$2*.unl" | xargs more | awk -F, '{if ($2==3 && $4~/'$ACCOUNT'/) print $0}' | wc -l`

RECEIVE_SUCCESS=`find ./cdr/sipmtbill/bak -name "*$2*.unl" | xargs more | awk -F, '{if (($2==7 && $8~/'$ACCOUNT'/) && $17==200) print $1}' | sort | uniq -c | wc -l`

RECEIVE_FAIL=`find ./cdr/sipmtbill/bak -name "*$2*.unl" | xargs more | awk -F, '{if (($2==7 && $8~/'$ACCOUNT'/) && $17!=200) print $1}'| sort | uniq -c | wc -l`

RECEIVE_ALL=`find ./cdr/sipmtbill/bak -name "*$2*.unl" | xargs more | awk -F, '{if ($2==7 && $8~/'$ACCOUNT'/) print $1}'| sort | uniq -c | wc -l`

REPEAT_SEND=`find ./cdr/sipmtbill/bak -name "*$2*.unl" | xargs more | awk -F, '{if (($2==7 && $9!=1 ) && ($17==200 && $8~/'$ACCOUNT'/)) print $0}'| sort | uniq -c | wc -l`

echo -e "\n"

if [ -z $SENDACCOUNT ]; then
  echo -e "$1 total send times is: 0\n"
else
  echo -e "$1 Total send times is: $SENDACCOUNT\n"
fi

echo -e "--------------------------------------------\n"

if [ -z $RECEIVE_SUCCESS ]; then
  echo -e "$1 total success receive times is: 0\n"
else
  echo -e "$1 Total success receive times is: $RECEIVE_SUCCESS\n"
fi

echo -e "--------------------------------------------\n"

if [ -z $RECEIVE_FAIL ]; then
  echo -e "$1 total fail receive times is: 0\n"
else
 echo -e "$1 Total fail receive times is: $RECEIVE_FAIL\n"
fi

echo -e "--------------------------------------------\n"

if [ -z $RECEIVE_ALL ]; then
  echo -e "$1 total receive times is: 0\n"
else
  echo -e "$1 Total receive times is: $RECEIVE_ALL\n"
fi

echo -e "--------------------------------------------\n"

if [ -z REPEAT_SEND ]; then
  echo -e "$1 total repeat_send times is: 0\n"
else
  echo -e "$1 Total repeat_send times is: $REPEAT_SEND\N"
fi

#set +x

 

awk 是一个强大的文本分析工具,可用于对数据进行统计分析,下面介绍几种常见的使用 awk 统计数量的方法: ### 统计某列特定元素的个数 统计文件中第 4 列为 0 的行数,可使用如下命令: ```bash awk '$4 == 0 { count++ } END { print count }' your_file.txt ``` 此命令会遍历文件的每一行,当第 4 列的值为 0 时,计数器 `count` 加 1,处理完所有行后,在 `END` 块中打印计数器的值,即第 4 列为 0 的行数[^2]。 也可以将第 4 列为 0 的行打印到屏幕: ```bash awk '$4 == 0 { print }' your_file.txt ``` 或者更简洁的写法: ```bash awk '$4 == 0' your_file.txt ``` ### 统计某列不同元素的出现次数 假设有一个文件 `data.txt`,内容如下: ``` apple banana apple cherry banana apple ``` 要统计每种水果的出现次数,可使用如下命令: ```bash awk '{ fruit[$1]++ } END { for (f in fruit) print f, fruit[f] }' data.txt ``` 这里 `fruit` 是一个数组,以每行的第一个字段(即水果名称)作为数组索引,每遇到一次该水果,对应索引的值加 1。处理完所有行后,在 `END` 块中使用 `for` 循环遍历数组,打印每种水果及其出现次数[^1]。 ### 统计文件行数 统计文件的行数可使用如下命令: ```bash awk 'END { print NR }' your_file.txt ``` `NR` 是 awk 的内置变量,表示当前处理的行号,在 `END` 块中打印 `NR` 的值,即文件的总行数[^3]。 ### 统计某列数字的总和 假设有一个文件 `numbers.txt`,内容如下: ``` 10 20 30 40 ``` 要统计该文件中数字的总和,可使用如下命令: ```bash awk '{ sum += $1 } END { print sum }' numbers.txt ``` 此命令会将每行的第一个字段(即数字)累加到变量 `sum` 中,处理完所有行后,在 `END` 块中打印 `sum` 的值,即数字的总和[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值