免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: evanking
打印 上一主题 下一主题

如何替换数据中的空格分隔符 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-07-06 23:49 |只看该作者
原帖由 mystérieux 于 2008-7-6 23:43 发表


他是要尾不要头,我的该怎么改?

8楼写了,看到这个我第一个想到的是awk,因为awk可以把多个分隔符当成一个,而且直接用$1$2$3加上自己的分隔符,更简单,用sed就要三步,行首,行中,行尾,所以虽然awk不熟,我还是用了awk。

论坛徽章:
0
12 [报告]
发表于 2008-07-06 23:52 |只看该作者
awk 'BEGIN{OFS="|"} {$1=$1;print}' urfile
好!

论坛徽章:
0
13 [报告]
发表于 2008-07-06 23:54 |只看该作者
两步就行:
sed 's/\s\+//;s/\s\+\|$/|/g'

论坛徽章:
0
14 [报告]
发表于 2008-07-07 00:06 |只看该作者
原帖由 xwmhmily 于 2008-7-6 23:52 发表
awk 'BEGIN{OFS="|"} {$1=$1;print}' urfile
好!


这一句awk用了27个字符,我sed用了22个字符,你说哪个更好?再说你这尾巴也没加上啊。

[ 本帖最后由 mystérieux 于 2008-7-7 00:45 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2008-07-07 00:15 |只看该作者
原帖由 mystérieux 于 2008-7-6 23:54 发表
两步就行:
sed 's/\s\+//;s/\s\+\|$/|/g'

有问题:echo "aa  bb  cc  "|sed 's/ \+//;s/ \+\|$/|/g'

论坛徽章:
0
16 [报告]
发表于 2008-07-07 00:19 |只看该作者
多谢,改了一下:
sed 's/\s*//;s/\s\+\|$/|/g'
这下子更少了,只有21个字符。

论坛徽章:
0
17 [报告]
发表于 2008-07-07 00:43 |只看该作者
那位仁兄的awk可以简化,这样只用20个字符: awk 'OFS="|"{$1=$1;print}'
不过没加上尾巴。

论坛徽章:
0
18 [报告]
发表于 2008-07-07 01:00 |只看该作者
sed VS awk - -#

论坛徽章:
0
19 [报告]
发表于 2008-07-07 01:05 |只看该作者
一个程序是不是好并不是只看程序大小,还有容错性和可读性。
可读性的话我的那个应该理解起来最简单的吧,容错的话比如文件里面不一定是空格,可能是tab,awk直接可以上,不用改。

论坛徽章:
0
20 [报告]
发表于 2008-07-07 01:14 |只看该作者
各位好,感谢大家对此问题的积极响应,此问我已经解决了,主要是受了SHELL专区wingger大侠写的SHELL基础十二篇中,sed命令那一部分的启发.

现共享给大家,多交流!!

#sed ‘s/[][][]*/[]/g’ test1.txt |sed ‘s/^[][]*//g’ |sed ‘s/\[]/|/g’ |sed ‘s/$/|/g’ >test.unl

说明:以上这个命令是四个sed命令连续执行,前一个命令的输出作为后一个命令的输入

   Sed后面的命令都是以单引号包起来

   因为命令本身是有空格的,为了便于阅读,所以有空格的地方我都用[ ]表示一个空格,实际执行的时候,只需要把一个[ ]换成一空格,三个[ ]就连输三个空格即可.

第一个sed作用是将分隔符中多个空格压缩成一个空格

第二个sed作用是将行首的空格删除

第三个sed作用是将空格分隔符替换成|管道符

第四个sed作用是在行末增加一个|管道符
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP