LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1067|回复: 8

一个文本处理问题

[复制链接]
发表于 2006-1-20 11:47:17 | 显示全部楼层 |阅读模式
文本的模式如下
...
a12345
b1
c123
...
我想将其转为
。。。
a1a2a3a4a5
b1
c1c2c3

搞不定,help
发表于 2006-1-20 17:40:07 | 显示全部楼层
郁闷
想了一个下午也不会
刚看完sed&awk 白看了 555555
高手指点
回复 支持 反对

使用道具 举报

发表于 2006-1-21 00:39:52 | 显示全部楼层
猜测一下,是不是这样的结果?
/home/lee#cat a
a12345
b1
c123

  1. /home/lee#\
  2. > awk '{gsub(/./,"& ");str=substr($0,1,1)}\
  3. {if(NF>2){for(i=2;i<=NF;i++)printf str$i;printf "\n"}\
  4. else{gsub(/ /,"");print}}' a
复制代码
结果:
a1a2a3a4a5
b1
c1c2c3
/home/lee#
回复 支持 反对

使用道具 举报

发表于 2006-1-23 11:52:39 | 显示全部楼层
感动
看来只看书 不动手是不行的
谢谢了
回复 支持 反对

使用道具 举报

发表于 2006-1-23 16:58:50 | 显示全部楼层
学到东西了,一直都是有点怕awk,看来是要学学awk才行。
回复 支持 反对

使用道具 举报

发表于 2006-1-24 15:45:36 | 显示全部楼层
烈火,这句:gsub(/./,"& ");(为什么去掉一样执行)
else{gsub(/ /,"");(这句呢?我去掉就没有结果了).
回复 支持 反对

使用道具 举报

发表于 2006-1-24 20:34:16 | 显示全部楼层
else这句打印短句,去掉就不全了;

用sed也可以:
[PHP]
sed '/^[a-z][0-9][0-9][0-9]*$/{s/^\(.\)./\0\1/;:loop /^\(.\).*\1.$/b end; s/^\(.\).*\1./\0\1/;b loop; :end }'

a1a2a3a4
b1
c1c2
d1d2d3d4d5d6d7d8[/PHP]
回复 支持 反对

使用道具 举报

发表于 2006-1-25 18:12:42 | 显示全部楼层
Post by linux_now
else这句打印短句,去掉就不全了;

用sed也可以:
[PHP]
sed '/^[a-z][0-9][0-9][0-9]*$/{s/^\(.\)./\0\1/;:loop /^\(.\).*\1.$/b end; s/^\(.\).*\1./\0\1/;b loop; :end }'

a1a2a3a4
b1
c1c2
d1d2d3d4d5d6d7d8[/PHP]

PFPF
回复 支持 反对

使用道具 举报

发表于 2006-2-6 08:41:13 | 显示全部楼层
/home/lee#\
> awk '{gsub(/./,"& ");str=substr($0,1,1)}\
{if(NF>2){for(i=2;i<=NF;i++)printf str$i;printf "\n"}\
else{gsub(/ /,"");print}}' a

请问这里的字段分割符是什么,没看到是如何设置fs阿?谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表