免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2730 | 回复: 7
打印 上一主题 下一主题

在线求助!如何在一个文件里把每3列加一个换行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-15 11:47 |只看该作者 |倒序浏览
是我从informix数据库查询出来的,应该有5000多行记录,但打印到文件里没有换行,文件只有无比之长一行:
234567 10 海南 34235 12 越秀区 353563 19 大沙头 ......
我想每三列加一个换行,变成:
234567 10 海南
34235 12 越秀区
353563 19 大沙头
......

各位大侠帮忙啊!

论坛徽章:
0
2 [报告]
发表于 2003-05-15 12:02 |只看该作者

在线求助!如何在一个文件里把每3列加一个换行?

无比之长一行
这样的文件恐怕难办。不过不妨把你抽取数据的代码贴出来让大家看看,或许可从源头上解决问题。

论坛徽章:
0
3 [报告]
发表于 2003-05-15 12:47 |只看该作者

在线求助!如何在一个文件里把每3列加一个换行?

如果你的数据列(域)不超过100的话,可以用下面代码试试(SCO UNIX 5.0.5)
  1. awk '{for(i=1;i<=NF;i++)if(i%3==0){print $i}else{printf"%s ",$i}}' file
复制代码

论坛徽章:
0
4 [报告]
发表于 2003-05-15 13:13 |只看该作者

在线求助!如何在一个文件里把每3列加一个换行?

AIX处理5000行肯定没问题.

sco好象不幸.

论坛徽章:
0
5 [报告]
发表于 2003-05-15 14:16 |只看该作者

在线求助!如何在一个文件里把每3列加一个换行?

试过了,返回下面的信息。
awk: Input line msisdn ctd_uniontype cannot be longer than 3,000 bytes.
不知我讲的众位看明白没有。
我把sql语句嵌在shell脚本里面从informix数据库里查询,返回的5000多条记录全横者写在一行里面,空格分隔,没换行。也就是说文件只有一行,10万多个字符。
现在想每三列加一个回车。

论坛徽章:
0
6 [报告]
发表于 2003-05-15 16:05 |只看该作者

在线求助!如何在一个文件里把每3列加一个换行?

5000多条记录怎么写成一行的?
select出来的东西不是每条记录写一行吗?

论坛徽章:
0
7 [报告]
发表于 2003-05-15 16:15 |只看该作者

在线求助!如何在一个文件里把每3列加一个换行?

不知你用没用过informix的dbaccess,就是这么变态!
下面是我的脚本,要从informix数据库里取数,只能这么写:

#!/bin/sh
ctd=`dbaccess scp20 - <<!   2>/dev/null
#下面这句没关系,是不占用数据库lock
set isolation dirty read;
select distinct
b.uniontypename,
b.ctd_uniontypeidx,
count(*)
from ctd_userinfo a,ctd_uniontype b
where a.ctd_uniontypeidx=b.ctd_uniontypeidx
and a.msisdn in
(select msisdn from basetab_pps where groupno=20
and accountstate=1 and substate=1)
group by 1,2
!`

echo $ctd

返回的几千条记录应该是三列,但全都打在一行里面。
呜呜呜!气死我了!

论坛徽章:
0
8 [报告]
发表于 2003-05-15 16:22 |只看该作者

在线求助!如何在一个文件里把每3列加一个换行?

不要将结果送给变量
echo $ctd 这里有问题;
建议删除,然后运行你的shell,假设为mydata:
  1. mydata  >mydat
  2. cat mydat
复制代码
必将是三列一行的形式!
  1. #!/bin/sh
  2. #mydata
  3. dbaccess scp20 - <<! 2>/dev/null
  4. #下面这句没关系,是不占用数据库lock
  5. set isolation dirty read;
  6. select distinct
  7. b.uniontypename,
  8. b.ctd_uniontypeidx,
  9. count(*)
  10. from ctd_userinfo a,ctd_uniontype b
  11. where a.ctd_uniontypeidx=b.ctd_uniontypeidx
  12. and a.msisdn in
  13. (select msisdn from basetab_pps where groupno=20
  14. and accountstate=1 and substate=1)
  15. group by 1,2
  16. !
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP