新手请教 一个文件排序问题

新手请教 一个文件排序问题

刚学perl,问个问题,我有一个文件1.txt,内容如下:
你 12351
他 28525
它 35646
好 12353
大 54454
每一行有一个汉字,后面跟一个空格,然后再是五个数字,请教一下,我如何能够在生成一个2.txt,内容如下:
你 12351
好 12353
他 28525
它 35646
大 54454
就是说顺序是按照后面的数字来排列的 .
可以先把1.txt文件里的数据放数组里,数组中把汉字和数字位置换下(substr下再连起来),然后sort一下数组再写入2文件里就ok了。
呵呵,也许有更简单的方法。。。这是偶的理解~~
对了,写入2文件再把位置调过来。。。忘了。。。


[Copy to clipboard] [ - ]
CODE:
E:\k>type 1.txt
你 12351
他 28525
它 35646
好 12353
大 54454

E:\k>perl -ane "$h{$F[1]}=$F[0];END{print $h{$_},' ',$_,chr(10) for sort keys %h}" 1.txt > 2.txt

E:\k>type 2.txt
你 12351
好 12353
他 28525
它 35646
大 54454

E:\k>

先读入一个hash中,然后根据value排序

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
my $text = shift || "1.txt";
open my $file,"<",$text or die "Fail to open $text $!";
my %hash;
while(<$file>){
     my ($key,$value) = split /\s+/;
     $hash{$key} = $value;
     }
open my $out,">","2.txt" or die "Fail to create 2.txt $!";
print $out "$_ $hash{$_}\n" foreach ( sort { $hash{$a} <=> $hash{$b} }keys %hash);



QUOTE:
原帖由 __lxmxn__ 于 2008-4-10 09:17 发表
E:\k>type 1.txt
你 12351
他 28525
它 35646
好 12353
大 54454

E:\k>perl -ane "$h{$F[1]}=$F[0];END{print $h{$_},' ',$_,chr(10) for sort keys %h}" 1.txt > 2.txt

E:\k>type 2.txt
你 12351
...

niubility
只听说过awk,具体没有怎么用过
那时认为perl兼容了awk和sed,所以对这两个工具就直接无视了
谢谢 楼上的 不过我在cygwin中出了错误,能帮我看看吗
$ perl -ane "$h{$F[1]}=$F[0];END{print $h{$_},' ',$_,chr(10) for sort keys %h}" 1.txt > 2.txt
上面是命令行,下面是错误信息:
Bareword found where operator expected at -e line 1,nea "1.txt"(Missing operator before txt?)
Bareword found where operator expected at -e line 1,nea "1.txt"(Missing operator before txt?)
syntax error at -e line 1,near "}="
syntax error at -e line 1,near "1.txt"
Execution of -e aborted due to compilation errors.
请帮我下。
你把 " 改成 '
把 ' 改成 "
试试
试了 ,不成 ,还有churchmice 的方法可以哈 ,谢谢啦 !!!
没Cygwin的环境,试试:

[Copy to clipboard] [ - ]
CODE:
perl -ane '$h{$F[1]}=$F[0];END{print "$h{$_} $_\n" for sort keys %h}' 1.txt