2012-07-31 5 views
0

Le code parle de lui-même, n'a pas utilisé de tri dans le code, car je ne sais pas votre utilisation c'est le code de contenu en perl.Perl hachage et tableau + tri

/bash/perl 
%ttys =(); 
my @lsarray = `cat /home/delkav/labs-scripts/grep`; 
my @array; 
$array[0] = <STDIN>; < ONE 
$array[1] = <STDIN>; < TWO 
$array[2] = <STDIN>; < TRHEE 
$array[3] = <STDIN>; < FOUR 
$array[4] = <STDIN>; < FIVE 
$array[5] = <STDIN>; < SIX 
$array[6] = <STDIN>; < SEVEN 
$array[7] = <STDIN>; < EIGHT 
$array[8] = <STDIN>; < NINE 
@ttys{@lsarray} = @array; 
print "@{[%ttys]}\n" 

contenu dans/home/delkav/laboratoires-scripts/grep est:

$90850 
$0 
$389 
$469 
$670 
$750 
$684 
$21744 
$604 

l'impression sur le script

$684 
SEVEN 
$469 
FOUR 
$21744 
EIGHT 
$670 
FIVE 
$389 
TRHEE 
$90850 
ONE 
$0 
TWO 
$750 
SIX 
$604 
NINE 

J'ai besoin de la sortie comment cela.

$90850 
ONE 
$0 
TWO 
$389 
THREE 
$469 
FOUR 
$670 
FIVE 
$750 
SIX 
$684 
SEVEN 
$21744 
EIGHT 
$604 
NINE 

bien, merci pour votre aide.

Répondre

2

Si vous devez conserver l'ordre, vous ne devez pas utiliser de hachage, car les fonctions de hachage ne maintiennent pas l'ordre. à la place, vous devriez utiliser un tableau ref. Peut-être comme ceci:

#!/bash/perl 
my @ttys; 
my @lsarray = map { chomp; $_ } `cat /home/delkav/labs-scripts/grep`; 
my @array; 
chomp($array[$_] = <>) for 0..8; 
push @ttys, [$array[$_], $lsarray[$_]] for 0..$#array; 
print "$_->[0]\n$_->[1]\n" foreach @ttys; 
+0

c'est parfait, merci !! très simple votre code. – opmeitle

0

Peut-être que cela:

print "$_\n$ttys{$_}\n" for @lsarray; 
+0

notez que dans le code OPs, les éléments de @lsarray et les clés et valeurs de% tty ont déjà des nouvelles lignes – ysth

0

Vous devriez toujours use strict et use warnings en haut de chaque programme. Vous devriez également ouvrir le fichier de données et le lire en Perl plutôt que de le convertir en cat.

Ce programme fait ce dont vous avez besoin.

use strict; 
use warnings; 

open my $fh, '<', '/home/delkav/labs-scripts/grep' or die $!; 

my @numbers = qw/ ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE TEN /; 

my $i = 0; 
while (<$fh>) { 
    print; 
    print $numbers[$i++], "\n"; 
} 
Questions connexes