shell中字符串分割

shell中字符串分割

例子:
[一],将如下字符串存放于t.txt文件下
1:6:0;2:4794537:1;3:19:0;4:28200:0;6:12:1;7:130:1;11:84439:0;
1:1:0;2:108914:0;7:10:0;
1:5:0;2:7104035:1;3:48:1;4:150070:1;6:18:1;7:79:0;
1:1:0;16:10:0;2:380200:0;4:5050:0;6:5:0;10:1:0;11:345715:0;13:2000:0;
........
将如上字符,转换成如下类型:
[二],将转换好的字符存放于task_outfile.txt文件下
1:6:0
6:12:1
7:130:1
11:84439:0
1:1:0
2:108914:0
2:7104035:1
......
最终结果需要得到如下:
[三],
6:12:1
7:130:1
2:7104035:1
......

方法如下:
如上[一到二]转换:
#!/bin/bash

while read line
        do
                myline=`echo $line | tr -cd ';' | wc -c`   #统计行字符串中";"数量
                num=1
                while [ $num -le $myline ] #每行";"数量循环次数
                do
                        echo $line | cut -f $num -d ';' >> ./task_outfile.txt #每行";"作,分割点
                        let num=num+1
                done
        done <.>
而后....
[二到三]转换:
#!/bin/bash

while read line
do
          myline=`echo $line|awk -F ":" '{print $3}'` #":"分隔条件,取第3个域
if [ $myline -eq 1 ]
            then
echo $line >> ./task.txt
fi
done < ./task_outfile.txt
这里用到while do ... done,从文件中一行行读取字符串read ...,等.

增加些内容:
问题如下:
a b (2列名称便于说明)
2757600 2:46601:0;10:46601:0;
转化成如下格式:
2757600 2:46601:0
2757600 10:46601:0
方法如下:
#!/bin/bash

while read line
        do
                                tmpmyline=`echo $line | awk -F " " '{print $2}'` #取出b列字符
                                myline=`echo $tmpmyline | tr -cd ';' | wc -c` #统计b列中;数量
                num=1
                while [ $num -le $myline ]
                do
                                        tmpline=`echo $line | awk -F " " '{print $1}'` #取出a列数据 
                                        var=$tmpline   
                                        var2=`echo $tmpmyline | cut -f $num -d ';'` #按照b列中;分割
                                        var3=" "
                                        var=${var}${var3}${var2}  #a列+空格+字符
                                        echo ${var} >> ./task_outfile.txt 

                        let num=num+1
                done
        done <.>

2757600 2:46601:0
2757600 10:46601:0
若将其数据贴如excel中,请过滤下行之间的"空格"(这也是遇到问题,未解决...),否则,行数据
放在一个格子中;


参考内容:
1.http://blog.csdn.net/fansongy/article/details/6724228 ---shell编程控制结果;
2.http://lyklove123.blog.163.com/blog/static/199371378201282935514507/ --shell从文件中读取数据


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26855487/viewspace-753552/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26855487/viewspace-753552/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值