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/