CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

shell如何实现这种高难度的合成

楼主ilovemayong(IHavemoney)2005-02-18 15:29:36 在 Linux/Unix社区 / 程序开发区 提问

shell如何实现这种高难度的合成  
   
  文件如下:  
  [2005/02/18   13:44:23   B0099S05]   SELECT   a,  
  ||   b,  
  ||   from   dual;  
  [2005/02/18   13:44:23   B0099S05]   UPDATE   MATERIAL   T    
  ||   SET   T.CDELDATE   =   '20050216'    
  [2005/02/18   13:44:23   B0099S05]   DELETE   *   from   MATERIAL;  
  aaaaaaaaaaa  
  bbbbbbbbbb  
  PL/SQL   over!。  
   
  要求:  
  1:将文件中所有含有B0099S05的行,的下一行含有||的去掉||合成一行,生成另一个  
    文件;   即新文件应该如下:  
  [2005/02/18   13:44:23   B0099S05]   SELECT   a,   b,   from   dual;  
  [2005/02/18   13:44:23   B0099S05]   UPDATE   MATERIAL   T   SET   T.CDELDATE   =   '20050216'  
  [2005/02/18   13:44:23   B0099S05]   DELETE   *   from   MATERIAL;  
   
  请教大虾阿:  
  谢谢!  
  问题点数:100、回复次数:5Top

1 楼warabi(厥)回复于 2005-02-18 16:36:57 得分 20

试试看,这个perl版的中不?  
   
  -------------------------  
  #!/usr/bin/perl  
   
  $src   =   $ARGV[0];  
  $dest   =   $ARGV[1];  
   
  open   IN,$src;  
  open   OUT,">$dest";  
  while(<IN>)   {  
  s/(\r)?\n$//;  
  s/^\|\|//;  
  s/^\[/\n/;     #   Linux   version  
  print   OUT   $_;  
  }  
  close   OUT;  
  close   IN;  
  -------------------------  
  思路:  
    1.去回车   2.   去   "||"   3.   加回车  
  用法:  
  另存为     conv.pl  
  $   perl   conv.pl   yourOrgFile   yourOutputFile  
   
  最近比较闲,呵呵   ...Top

2 楼warabi(厥)回复于 2005-02-18 16:39:04 得分 2

相同的做法,  
  用shell   的sed也应该能做出来。  
  可,那个俺不会。Top

3 楼wti(wti)回复于 2005-02-18 20:39:12 得分 2

有sed2perl   or   awk2perl,不知道有没有perl2awk   或是   perl2sedTop

4 楼sourceid()回复于 2005-02-19 10:57:31 得分 2

写了个shell脚本.  
   
  #!/bin/sh  
  #   runsql.sh  
   
  sed   '/^[^\[\||]/d'   rec.txt   >out1.txt  
   
  while   read   LINE  
  do  
  case   $LINE   in  
  \[*)   echo   -n   "$LINE"   >>out2.txt  
  ;;  
  \|*)   echo   -n   "$LINE"   >>out2.txt  
  ;;  
  esac  
  done   <   out1.txt  
  sed   's/\[/\n\[/g'   out2.txt   |   sed   's/\||//g'   |   sed   -e   '/^$/d'   >out.txt  
  rm   -f   out1.txt   out2.txt  
     
  Top

5 楼gettext(冰雪之崖)回复于 2005-02-19 10:59:05 得分 74

#   cat   file   |   sed   -e   :a   -e   '$!N;s/\n||/   /;ta'   -e   'P;D'Top

相关问题

  • 高难度报表,如何实现?
  • 高难度!一句SQL如何能实现这样的功能?
  • 这个程序用C#怎么实现(高难度)
  • 高难度............................................
  • 高难度
  • 高难度
  • 高难度
  • 高难度问题:如何编程实现快速批量的检测zip文件的好坏?
  • 高难度问题,怎么用asp编程实现在服务器上注册dll组件
  • 200分问一个高难度问题,不知这样的功能能否用脚本实现?UP有分

关键词

  • perl
  • 文件
  • shell
  • b0099s05
  • sed
  • material
  • txt
  • line

得分解答快速导航

  • 帖主:ilovemayong
  • warabi
  • warabi
  • wti
  • sourceid
  • gettext

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo