免费注册 查看新帖 |

Chinaunix

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

如何處理文本??? [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-26 15:10 |只看该作者 |倒序浏览
本帖最后由 Tracy_Panda 于 2016-05-26 15:14 编辑

原文本是這樣的:
2698         DYS389I        12
2698         DYS389I        12
2720         DYS389I        12
2720         DYS389I        12
2736         DYS389I        12
2736         DYS389I        12
2698         DYS389II        27
2698         DYS389II        27
2720         DYS389II        28
2720         DYS389II         
2736         DYS389II        29
2736         DYS389II         
2698         DYS390        25
2698         DYS390        25
2720         DYS390        24
2720         DYS390         
2736         DYS390        22
2736         DYS390         
2698         DYS456        15
2698         DYS456        15
2720         DYS456        14
2720         DYS456        14
2736         DYS456        15
2736         DYS456         

想變成下面的形式:
        DYS390        DYS389I        DYS456        DYS389II
2698        25        12        15        27
2698        25        12        15        27
2720        24        12        14        28
2720                12        14       
2736        22        12        15        29
2736                12               

--------------分割線----------------

原文中有三列數據,分別是序列號,突變的位點以及對應的數值,想得到的形式大家也看到了,希望各位牛人幫忙看一下,小白在此先謝過各位了!!!

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
2 [报告]
发表于 2016-05-26 16:28 |只看该作者
这就是 excel 中的分类汇总吧,其实用数据库类软件处理,最合适不过了。

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00
3 [报告]
发表于 2016-05-26 16:33 |只看该作者
因爲現在剛剛開始學習perl,而且以後還會用到perl去處理文本,所以想用它解決這個問題。還是謝謝你的答覆 以後我會考慮的!!!回复 2# 104359176


   

论坛徽章:
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-05-26 17:17 |只看该作者
本帖最后由 sunzhiguolu 于 2016-05-26 17:20 编辑

回复 1# Tracy_Panda
问下, 各突变的行数是相等的吗? 比如示例中的这几个 => {DYS389I,DYS389II,DYS390,DYS456}

   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00
5 [报告]
发表于 2016-05-26 17:26 |只看该作者
對的,原文中一共測了三個樣本,但是每個樣本測了兩遍,所以每個突變點都有六行數據。因爲是直接複製過來的文件,格式可能不太清楚,抱歉!!!回复 4# sunzhiguolu


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2016-05-26 19:15 |只看该作者
回复 1# Tracy_Panda

$ perl cb.pl FILE
        DYS389I        DYS389II        DYS390        DYS456        
2698        12        27        25        15
2698        12        27        25        15
2720        12        28        24        14
2720        12                        14
2736        12        29        22        15
2736        12                        

$ cat cb.pl
use strict;
use warnings;

my(%hDsy, %hKey, %hVal, %hCnt);
my(@aDsy, @aKey);

while(<>){
  chomp;
  my($sKey, $sDsy, $sVal) = split;
  push(@aDsy, $sDsy) if(!$hDsy{$sDsy}++);
  push(@aKey, $sKey) if(!$hKey{$sKey}++);
  my $sCnt = ++$hCnt{$sKey}{$sDsy};
  $hVal{$sKey, $sDsy, $sCnt} = $sVal;
}

print join("\t", "", @aDsy,"\n");
foreach my $sKey (@aKey){
  my $sMax = (sort{$b<=>$a}values %{$hCnt{$sKey}})[0];
  foreach my $sCnt (1 .. $sMax){
    my $sOut = "$sKey";
    foreach my $sDsy (@aDsy){
      $sOut .= "\t$hVal{$sKey,$sDsy,$sCnt}";
    }
    print "$sOut\n";
  }
}


   

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 神马都是浮云!!!

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2016-05-26 19:54 |只看该作者
本帖最后由 Okelani 于 2016-05-26 19:55 编辑

回复 1# Tracy_Panda
  1. #!/usr/bin/perl
  2. use 5.018;

  3. my %n;
  4. while (<DATA>) {
  5.     my ( $n, $d, $v ) = split;
  6.     push @{ $n{$n}{$d} }, $v // '';
  7. }

  8. my ($k) = keys %n;
  9. my @dys = sort { $a cmp $b } keys %{ $n{$k} };
  10. my $n = $#{ $n{$k}{ $dys[0] } };
  11. say join "\t", '', @dys;

  12. for my $k ( sort keys %n ) {
  13.     for my $i ( 0 .. $n ) {
  14.         say join "\t", $k, map { $n{$k}{$_}[$i] } @dys;
  15.     }
  16. }

  17. __DATA__
  18. 2698         DYS389I        12
  19. 2698         DYS389I        12
  20. 2720         DYS389I        12
  21. 2720         DYS389I        12
  22. 2736         DYS389I        12
  23. 2736         DYS389I        12
  24. 2698         DYS389II        27
  25. 2698         DYS389II        27
  26. 2720         DYS389II        28
  27. 2720         DYS389II         
  28. 2736         DYS389II        29
  29. 2736         DYS389II         
  30. 2698         DYS390        25
  31. 2698         DYS390        25
  32. 2720         DYS390        24
  33. 2720         DYS390         
  34. 2736         DYS390        22
  35. 2736         DYS390         
  36. 2698         DYS456        15
  37. 2698         DYS456        15
  38. 2720         DYS456        14
  39. 2720         DYS456        14
  40. 2736         DYS456        15
  41. 2736         DYS456         
复制代码

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 神马都是浮云!!!

查看全部评分

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
8 [报告]
发表于 2016-05-26 20:10 来自手机 |只看该作者
$> cat test.pl
##read file
while (<>
{
@F= split /\s+/, $_;
$H->{$F[1]} = $i++ unless (exists $H->{$F[1]});
push @{$O->{$F[0]}->{$F[1]}}, $F[2];
}
use Data:umper;
printf "Data structure:\n---------\n%s\nResult:\n--------------\n", Dumper $O;
$,="\t";
print "",sort keys $H;
print "\n";
for (sort keys %$O)
{
for $i ( 0,1){
printf "$_";
foreach my $k (sort keys %$H)
{
printf "\t%s", $O->{$_}->{$k}->[$i];
}
print "\n";
}}

评分

参与人数 1信誉积分 +5 收起 理由
sunzhiguolu + 5 赞一个!

查看全部评分

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00
9 [报告]
发表于 2016-05-26 21:43 |只看该作者
先謝謝啦,測試一下,基本上沒什麼問題,我要好好研究裏面具體每一步的意義,還不是很能看懂,後續如果有問題還請多多指教 回复 6# jason680


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-06-29 06:20:00
10 [报告]
发表于 2016-05-26 21:44 |只看该作者
先謝謝啦,我測試一下蝦 回复 7# Okelani


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP