-3

次のようなファイルがあります。

23  Line number 23
2   Line number 2
87  Line number 87
28  Line number 28
4   Line number 4
83  Line number 83

最初の列をハッシュ キーとして、2 番目の列をハッシュ値として取得する必要があります。また、ハッシュキーを使用してファイルをソートする必要があります

4

2 に答える 2

1

これは簡単ですsplit。空白の線を2つに分割します。最初の部分は$key、、残りは$valueです。

次に、keys%hashアルファベット順に並べ替えて、すべてのデータを出力します。

#!/usr/bin/perl
use strict; use warnings;

my %hash;
while (<>) {
  chomp; # remove newline
  my ($key, $value) = split ' ', $_, 2;
  $hash{$key} = $value;
}
# or shorter:
# my %hash = map {chomp; split ' ', $_, 2} <>;

my @sorted_keys = sort keys %hash;
for my $key (@sorted_keys) {
  print "$key $hash{$key}\n";
}
# or shorter:
# print "$_ $hash{$_}\n" for sort keys %hash;

入力は、STDINを介して、またはコマンドライン引数で指定されたファイルとして提供できます。

指定した入力の出力:

2 Line number 2
23 Line number 23
28 Line number 28
4 Line number 4
83 Line number 83
87 Line number 87

数値による並べ替えが必要な場合は、に変更sort keysしてsort {$a <=> $b} keysください。

于 2013-02-07T07:36:36.693 に答える
0

これを試して:

#!/usr/perl/bin  -w
use strict;
use Data::Dumper;

my $file_name = "file.txt";
open(FH, "<".$file_name) or die "Could not open $file_name";
my %hash = ();
while(<FH>) {
    chomp;
    my ($key, $value) = split(/ /, $_);
    $hash{$key} = $value;
}

close FH;

print Dumper(%hash);
于 2013-02-07T07:01:41.970 に答える