免费注册 查看新帖 |

Chinaunix

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

Perl打印多行数据内容不顶格显示 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-05 14:08 |只看该作者 |倒序浏览
本帖最后由 shaunsyb 于 2015-05-05 14:33 编辑

用Perl 将 Oracle 数据库中 一个时间以及 clob 字段 的数据打印到文本中的时候,数据发生了串行,这个clob字段 是包含多行文本内容的,现在打印出来的数据如下:

2015/03/07 07:40:03 ORA-12012: error on auto execute of job 308
ORA-01403: no data found
ORA-06512: at "TEST.PCK_TEST", line 910
ORA-06512: at "TEST.PCK_TEST", line 335
ORA-06512: at line 1

而我想要的效果是 这样的

2015/03/07 07:40:03 ORA-12012: error on auto execute of job 308
                                ORA-01403: no data found
                                ORA-06512: at "TEST.PCK_TEST", line 910
                                ORA-06512: at "TEST.PCK_TEST", line 335
                                ORA-06512: at line 1



脚本如下:
  1. use strict;
  2. use warnings;
  3. use DBI;
  4. use DBD::Oracle;

  5. my $profile="~/.bash_profile";
  6. open(NEWENV, ". $profile && env|") or die "$!";
  7.   while (<NEWENV>){
  8.     if (/(\w+)=(.*)/){
  9.       $ENV{$1}="$2";
  10.     }
  11.   }
  12. close NEWENV;

  13. my $dbh = DBI->connect('dbi:Oracle:','/','',{ora_session_mode =>2}) or die( $DBI::errstr . "\n" );


  14. $dbh->{AutoCommit} = 1;
  15. $dbh->{LongReadLen} = 40480;  
  16. $dbh ->do("alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS'");

  17. my $sth=$dbh->prepare(q{select log_time,send_content from monitor_info_log});

  18. $sth->execute;

  19. my $svn_home="/home/ora10g/svn_data";

  20. open (SVNDATA,">","svndata.dat");

  21. while (my ($data1,$data2) = $sth->fetchrow_array) {
  22.         print SVNDATA "$data1 $data2"."\n";
  23. }
  24. close SVNDATA;

  25. $dbh->disconnect;
复制代码
请问下 需要怎么修改 才可以达到我需要的效果呢。

论坛徽章:
0
2 [报告]
发表于 2015-05-05 16:57 |只看该作者
大概
my $data1 = '2015/03/07 07:40:03 ORA-12012: error on auto execute of job 308';
my $data2 = '
ORA-01403: no data found
ORA-06512: at "TEST.PCK_TEST", line 910
ORA-06512: at "TEST.PCK_TEST", line 335
ORA-06512: at line 1';

$data2 =~ s/\n/\n\t/g;

print $data1, "\t", $data2, "\n";

论坛徽章:
0
3 [报告]
发表于 2015-05-05 17:34 |只看该作者
回复 2# ba_du_co


    嗯嗯。。这个可以的。。谢谢!

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2016-09-19 10:57 |只看该作者
  1. perl -ne 'if(/\A\d/){$i=index($_,"ORA");print;next}print $"x$i,$_' f
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP