文档处理请教!!

文档处理请教!!

我想处理一份数据,每行四个数据。原来的数据中有些是没有从小到大排列的,所以先要把每行的数据从小到大排列。然后再统计每个数据出现的次数,并将它记在后面,并输出到另一个文本文件。
整理前的DATA.txt
0000 0000 0000 0000
0001 0001 0002 0001
0002 0002 0002 0002
0003 0002 0003 0003
0004 0004 0004 0004
0005 0005 0005 0005
0006 0006 0006 0006
0007 0007 0007 0007
0007 0008 0008 0008
0009 0009 0009 0009
000A 000A 000A 000B
000B 000B 000B 000B
000C 000C 000D 000C
000D 000D 000D 000E      
000E 000E 000E 000F
000F 000F 000F 0010
整理后的DATA_.txt
0000 0000 0000 0000 4
0001 0001 0001 0002 3   
0002 0002 0002 0002 6
0002 0003 0003 0003 3
0004 0004 0004 0004 4
0005 0005 0005 0005 4
0006 0006 0006 0006 4
0007 0007 0007 0007 5
0007 0008 0008 0008 3
0009 0009 0009 0009 4
000A 000A 000A 000B 3
000B 000B 000B 000B 5
000C 000C 000C 000D 3
000D 000D 000D 000E 4   
000E 000E 000E 000F 4
000F 000F 000F 0010 1
本人刚刚开始学perl,只知道perl处理文本功能的强大,但学了两天还是不能对上面的问题给与解决。还请各位大虾帮助,小弟谢先了!!
#!user/bin/perl

use strict;
use warnings;

my @data;
while (<DATA>) {
        chomp;
        push @data, split;
}

@data = sort {hex($a) <=> hex($b)} @data;

my %data;
$data{$_} += 1 for @data;
my @keys = keys %data;
@keys = sort {hex($a) <=> hex($b)} @keys;

my $count = 0;
my $key = -1;
for (@data) {       
       
        print "$_ ";
        $count += 1;
       
        if ($count == 4) {
                $count = 0;
                $key += 1;
                print $data{$keys[$key]}, "\n";
                #print $data{$keys[$key]},' ', $keys[$key], ' ', $key, "\n";
        }       
}
__DATA__
0000 0000 0000 0000
0001 0001 0002 0001
0002 0002 0002 0002
0003 0002 0003 0003
0004 0004 0004 0004
0005 0005 0005 0005
0006 0006 0006 0006
0007 0007 0007 0007
0007 0008 0008 0008
0009 0009 0009 0009
000A 000A 000A 000B
000B 000B 000B 000B
000C 000C 000D 000C
000D 000D 000D 000E      
000E 000E 000E 000F
000F 000F 000F 0010

_______________________

这个仅针对你给出的数据,懒得想更通用的方法了
btw:你最好一行的统计有误吧。
谢谢,cobrawgl大虾!我运行了一下程序,输出结果正确!不过这个程序里面好像没有包括,怎么读DATA.txt文档的数据以及把结果保存在DATA_.txt中。由于刚学perl,这个还不是很清楚,再次麻烦大虾把这两个也加上去吧:P
“btw:你最好一行的统计有误吧。”好像是有问题的,我是人工看的:grin:
通用性暂时不管了,这些数据是我工作中测试芯片用的,等以后学好了,我自己来改,谢谢obrawgl

-------------------------------------------------------------------------------
#!user/bin/perl

    my $infile = 'DATA.txt';
    my $outfile = 'DATA_.txt';

    open DATA, "< $infile" or die "Can't open $infile : $!";
    open DATA_, "> $outfile" or die "Can't open $outfile : $!";
   
#    close DATA;
#    close OUT;

use strict;
use warnings;

my @data;
while (<DATA>;) {
        chomp;
        push @data, split;
}

@data = sort {hex($a) <=> hex($b)} @data;

my %data;
$data{$_} += 1 for @data;
my @keys = keys %data;
@keys = sort {hex($a) <=> hex($b)} @keys;

my $count = 0;
my $key = -1;
for (@data) {        
        
        print "$_ ";
        print DATA_ "$_ ";
        $count += 1;
        
        if ($count == 4) {
                $count = 0;
                $key += 1;
                print $data{$keys[$key]}, "\n";
                print DATA_  $data{$keys[$key]}, "\n";
               #print  $data{$keys[$key]},' ', $keys[$key], ' ', $key, "\n";
               
        }        
}
改好了,谢谢!可以交差了,今后要好好学perl了。