Escriba un programa Perl para mostrar el contenido del archivo en orden ordenado (ascendente) en función de los números de línea proporcionados a través de argumentos de línea de comandos. Tenga en cuenta que los números de línea pueden estar en cualquier orden y generar un error si el número de línea es grande.
Sintaxis: perl
Filename.pl
File_to_be_read.abc
x y z
Aquí,
Filename.pl es el nombre del archivo que contiene el script perl
File_to_be_read.abc es el nombre del archivo que se va a leer. Este archivo puede ser de cualquier tipo. Ex-texto, guión, etc.
xyz son los números de línea que se van a imprimir.
Enfoque:
ordene los números de línea excluyendo el primer argumento, que es el nombre del archivo. Una vez ordenado, lea todo el contenido del archivo en una array usando una declaración única (my @file = <FNAME>) . Ahora recorra los números de línea ordenados y muestre el contenido del archivo pasando el número de línea como índice a la array de archivos como ( print “$file[$var-1]\n”; ).
Ejemplo 1: Considere un archivo Hola.txt
#!/usr/bin/perl use warnings; use strict; # Check if line numbers are given as an input if (@ARGV < 2) { die "usage: pick file_name line_no1 line_no2 ..."; } open FNAME, $ARGV[0] or die "cannot open file"; # Exclude the first argument # for sorting line numbers shift (@ARGV); my @line_numbers = sort { $a <=> $b } @ARGV; # Read whole file content into an array # and removes new line using chomp() chomp (my @file = <FNAME>); foreach my $var (@line_numbers) { if ($var> $#file) { print "Line number $var is too large\n"; next; } print "$file[$var-1]\n"; } close FNAME;
Producción:
Ejemplo 2: Leer el mismo archivo de script
#!/usr/bin/perl use warnings; use strict; # Check if line numbers are given as an input if (@ARGV < 2) { die "usage: pick file_name line_no1 line_no2 ..."; } open FNAME, $ARGV[0] or die "cannot open file"; # Exclude the first argument # for sorting line numbers shift (@ARGV); my @line_numbers = sort { $a <=> $b } @ARGV; # Read whole file content into an array # and removes new line using chomp() chomp (my @file = <FNAME>); foreach my $var (@line_numbers) { if ($var> $#file) { print "Line number $var is too large\n"; next; } print "$file[$var-1]\n"; } close FNAME;
Producción:
Si el número de línea pasado no está en el archivo:
¿Escribir código en un comentario? Utilice ide.geeksforgeeks.org , genere un enlace y compártalo aquí.