免费注册 查看新帖 |

Chinaunix

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

文本处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-03 15:13 |只看该作者 |倒序浏览
本帖最后由 jningpupil 于 2013-12-03 15:17 编辑

有几列数据,比如     1  1.2  2.3  3.4
                           1  1.3  2.1  3.5
                           2  1.3  2.3  3.4
                           ......
现在要加上一些序号,变成如下形式
                           1  1:1.2  2:2.3  3:3.4
                           1  1:1.3  2:2.1  3:3.5
                           2  1:1.3  2:2.3  3:3.4
                           ......

即在第二列及以后的数据加上索引,这个在awk或者perl里面如何实现?

论坛徽章:
0
2 [报告]
发表于 2013-12-06 09:59 |只看该作者
结果是可以出来的,貌似程序很丑。。。
  1. while(<DATA>){
  2. if ($_=~s/\s(\d.\d)\s+(\d.\d)\s+(\d.\d)/1:$1 2:$2 3:$3/){
  3.         print;
  4. }
  5.         }

  6. __DATA__  
  7.   1  1.2  2.3  3.4                        
  8.   1  1.3  2.1  3.5
  9.   2  1.3  2.3  3.4
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-12-06 10:30 |只看该作者
初学perl,写的有点繁琐
  1. while (<DATA>) {
  2.         @rr=split;
  3.         foreach $i (0 .. $#rr){
  4.                 if ($i == 0){
  5.                         $rr[0].=" ";
  6.                         push @e,"$rr[0]";

  7.                 }
  8.                 else{
  9.                         $rr[$i]="$i:$rr[$i]";
  10.                         $rr[$i].=" ";
  11.                         push @e,$rr[$i];
  12.                 }
  13. #               $rr[$#rr].=" ";

  14.         }
  15.         push @e,"\n";
  16. }
  17. print @e;
  18. __DATA__
  19. 1 1.2 2.3 3.4
  20. 1 1.3 2.1 3.5
  21. 2 1.3 2.3 3.4
复制代码

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
4 [报告]
发表于 2013-12-06 10:46 |只看该作者
{:2_172:}
  1. my $space = "  ";
  2. while (<DATA>) {
  3.     my @line = split;
  4.     $line[$_] = "$_:$line[$_]" for 1 .. $#line;
  5.     print join( $space, @line ), "\n";
  6. }

  7. __DATA__  
  8. 1  1.2  2.3  3.4 4.5 5.1 6.4 7.1
  9. 1  1.3  2.1  3.5 4.6 5.2 6.2 7.2
  10. 2  1.3  2.3  3.4 4.2 5.3 6.9 7.9
复制代码
回复 1# jningpupil


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2013-12-06 10:58 |只看该作者
本帖最后由 yinyuemi 于 2013-12-06 10:58 编辑

回复 1# jningpupil
  1. perl -pe '$i=0;s/(?<=\s)(\S)(?{$i++})/$i:$1/g'
复制代码

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
6 [报告]
发表于 2013-12-06 21:08 |只看该作者
  1. $ cat a
  2. 1  1.2  2.3  3.4  2.2
  3. 1  1.3  2.1  3.5  2.2
  4. 2  1.3  2.3  3.4  2.2
  5. $ perl -ane '@F[$#F].="\n";print join "  ",$F[0],map{"$_:"."$F[$_]"} 1..$#F' a
  6. 1  1:1.2  2:2.3  3:3.4  4:2.2
  7. 1  1:1.3  2:2.1  3:3.5  4:2.2
  8. 2  1:1.3  2:2.3  3:3.4  4:2.2
  9. $
复制代码
回复 1# jningpupil


   

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
7 [报告]
发表于 2013-12-06 21:19 |只看该作者
顶一个
回复 5# yinyuemi


   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2013-12-07 00:17 |只看该作者
本帖最后由 yestreenstars 于 2013-12-07 00:22 编辑
  1. [root@localhost ~]# cat i
  2. 1  1.2  2.3  3.4
  3. 1  1.3  2.1  3.5
  4. 2  1.3  2.3  3.4
  5. [root@localhost ~]# awk '{for(i=1;++i<=NF;)$i=(i-1)":"$i}1' i
  6. 1 1:1.2 2:2.3 3:3.4
  7. 1 1:1.3 2:2.1 3:3.5
  8. 2 1:1.3 2:2.3 3:3.4
  9. [root@localhost ~]# perl -lane 'print join " ",$F[0],map {$_.":".$F[$_]} 1..$#F' i
  10. 1 1:1.2 2:2.3 3:3.4
  11. 1 1:1.3 2:2.1 3:3.5
  12. 2 1:1.3 2:2.3 3:3.4
  13. [root@localhost ~]#
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2013-12-07 05:51 |只看该作者
回复 5# yinyuemi
  1. perl -pe '$i=0;s/(?<=\s)(\S)(?{$i++})/$i:$1/g'
复制代码


学习了!
   

论坛徽章:
0
10 [报告]
发表于 2013-12-08 19:50 |只看该作者
回复 1# jningpupil


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP