file1:主叫 一个号码一行
file2:被叫 一个号码一行
要求:
格式:主叫|被叫|内容
被叫需轮循插入,防止同一个被叫,同一个时间接交过多短信,网关会丢弃。-另一个脚本将会批量读取这些文件插入数据库发送短信。
注:这个脚本有待完善行处理可采用awk。效率会更好(个人处理2W多个主叫,30个被叫需要十来分钟)
-
#!/bin/bash
-
########################################################################
-
# File Name: split_file.sh
-
# Author: wanggy
-
# mail: wgy-email@163.com
-
# Created Time: 2013年06月26日 星期三 13时50分09秒
-
# note:
-
# 1:calling_file 为主叫文件名称,called_file 为被叫文件名称
-
# 2:calling_file 会被切换成$num行的多个小文件
-
# 3:拼接成主叫|被叫|内容 被叫要求循环使用。
-
#########################################################################
-
calling_file=calling
-
called_file=called
-
#切割的条件:行
-
line=5000
-
content="hello"
-
#将主被叫文件转换成unix 格式
-
dos2unix $calling_file
-
dos2unix $called_file
-
split -l$line $calling_file calling_split_
-
#取被叫号码,添加至主叫文件时循环判断使用
-
called_num=`wc -l $called_file | awk '{print$1}'`
-
for sub_file in `ls calling_split_*`
-
#for sub_file in `ls test`
-
do
-
echo $sub_file
-
file_num=`wc -l $sub_file|awk '{print$1}'`
-
for ((i=1,j=1;i<=file_num;i++));
-
do
-
echo "正在处理${sub_file}文件第$i行,$called_file文件第$j行"
-
#取called第$j行的内容,添加至calling对应的$i行后面。格式:calling的$i行|called的$j行|内容
-
called_text=`awk NR==$j called`
-
sed -i ${i}'s/$/|'${called_text}'|'$content'/' $sub_file
-
#被叫行号手动加1
-
j=`expr $j + 1`
-
if [ "$j" -gt "$called_num" ];then
-
echo "被叫号码轮循完毕, 重置为第1行,继续...."
-
j=1
-
fi
-
done
-
done
-
exit 0
阅读(1676) | 评论(0) | 转发(0) |