确保文件的第一列为散列键,其余为散列值

时间:2013-02-07 06:52:16

标签: perl

我有一个如下文件:

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 个答案:

答案 0 :(得分:1)

这很简单:我们split将空白行分为两部分。第一部分是$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

答案 1 :(得分: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);