shell脚本实现不同文件主被叫拼接处理

发布时间:2020-01-29编辑:脚本学堂
分享一例shell脚本,以实现不同文件间的手机号主被叫的拼接处理,用来学习shell编程是相当不错的,感兴趣的朋友参考下吧。

本节内容:
shell/ target=_blank class=infotextkey>shell脚本处理不同文件中手机号码的主被叫拼接。

文件如下:
file1:主叫  一个号码一行
file2:被叫  一个号码一行

要求:
格式:主叫|被叫|内容
被叫需轮循插入,防止同一个被叫,同一个时间接交过多短信,网关会丢弃。-另一个脚本将会批量读取这些文件插入数据库发送短信。
注:这个脚本有待完善行处理可采用linuxjishu/13830.html target=_blank class=infotextkey>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: www.jb200.com
#    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