Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235386
  • 博文数量: 37
  • 博客积分: 325
  • 博客等级: 一等列兵
  • 技术积分: 1199
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-09 00:04
个人简介

坚持原创,虽然有些东西很简单,但也算是一种积累。

文章分类

全部博文(37)

文章存档

2013年(28)

2012年(9)

我的朋友

分类: 系统运维

2013-06-28 11:06:27

file1:主叫  一个号码一行
file2:被叫  一个号码一行
要求:
格式:主叫|被叫|内容
被叫需轮循插入,防止同一个被叫,同一个时间接交过多短信,网关会丢弃。-另一个脚本将会批量读取这些文件插入数据库发送短信。
注:这个脚本有待完善行处理可采用awk。效率会更好(个人处理2W多个主叫,30个被叫需要十来分钟)


点击(此处)折叠或打开

  1. #!/bin/bash
  2. ########################################################################
  3. # File Name: split_file.sh
  4. # Author: wanggy
  5. # mail: wgy-email@163.com
  6. # Created Time: 2013年06月26日 星期三 13时50分09秒
  7. # note:
  8. #    1:calling_file 为主叫文件名称,called_file 为被叫文件名称
  9. #    2:calling_file 会被切换成$num行的多个小文件
  10. #    3:拼接成主叫|被叫|内容 被叫要求循环使用。
  11. #########################################################################
  12. calling_file=calling
  13. called_file=called
  14. #切割的条件:行
  15. line=5000
  16. content="hello"
  17. #将主被叫文件转换成unix 格式
  18. dos2unix $calling_file
  19. dos2unix $called_file
  20. split -l$line $calling_file calling_split_
  21. #取被叫号码,添加至主叫文件时循环判断使用
  22. called_num=`wc -l $called_file | awk '{print$1}'`
  23. for sub_file in `ls calling_split_*`
  24. #for sub_file in `ls test`
  25. do
  26.     echo $sub_file
  27.     file_num=`wc -l $sub_file|awk '{print$1}'`
  28.     for ((i=1,j=1;i<=file_num;i++));
  29.     do
  30.         echo "正在处理${sub_file}文件第$i行,$called_file文件第$j行"
  31.         #取called第$j行的内容,添加至calling对应的$i行后面。格式:calling的$i行|called的$j行|内容
  32.         called_text=`awk NR==$j called`
  33.         sed -i ${i}'s/$/|'${called_text}'|'$content'/' $sub_file
  34.         #被叫行号手动加1
  35.         j=`expr $j + 1`
  36.         if [ "$j" -gt "$called_num" ];then
  37.             echo "被叫号码轮循完毕, 重置为第1行,继续...."
  38.             j=1
  39.         fi
  40.     done
  41. done
  42. exit 0


   
阅读(1623) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~