Das die 'Autosplit' Perl verwendet (oder 'awk') Modus:
perl -n -F'/;/' -a -e 'next if $. <= 5; print "$F[0]\n";' < data.file
See 'perlrun' und 'perlvar'.
Wenn Sie dies in einer Funktion zu tun, die ein Datei-Handle und eine Anzahl von Zeilen zu überspringen gegeben wird, dann werden Sie nicht die ‚Autosplit‘ -Modus Perl.
sub skip_N_lines_read_column_1
{
my($fh, $N) = @_;
my $i = 0;
my @files =();
while (my $line = <$fh>)
{
next if $i++ < $N;
my($file) = split /;/, $line;
push @files, $file;
}
return @files;
}
Dies initialisiert eine Schleife liest Linien, die erste von ihnen N-Skipping, dann die Linienaufspaltung und nur das erste Ergebnis zu erfassen. Diese Linie mit my($file) = split...
ist subtil; Die Klammern bedeuten, dass der Split einen Listenkontext hat, also generiert er eine Liste von Werten (anstatt einer Anzahl von Werten) und weist der Variable den ersten zu. Wenn die Klammern weggelassen würden, würden Sie einem Listenoperator einen skalaren Kontext geben, sodass Sie die Anzahl der Felder in der geteilten Ausgabe erhalten würden, die $file
zugewiesen ist - nicht was Sie benötigen. Der Dateiname wird an das Ende des Arrays angehängt, und das Array wird zurückgegeben. Da der Code das Dateihandle nicht geöffnet hat, wird es nicht geschlossen. Eine alternative Schnittstelle würde den Dateinamen (anstelle eines geöffneten Dateihandles) in die Funktion übergeben. Sie würden dann die Datei in der Funktion öffnen und schließen und sich um die Fehlerbehandlung kümmern.
Und wenn Sie die Hilfe mit dem Öffnen der Datei benötigen, etc, dann:
use Carp;
sub open_skip_read
{
my($name) = @_;
open my $fh, '<', $name or croak "Failed to open file $name ($!)";
my @list = skip_N_lines_read_column_1($fh, 5);
close $fh or croak "Failed to close file $name ($!)";
return @list;
}
Es ist möglich. Hast du schon einen Code? – aschepler
Ja und nein. Nicht dafür - aber ich habe mehr als 300 Codezeilen, in die ich dies umzusetzen versuche. Es ist im Grunde eine neue Funktion, die ich implementieren möchte, um Dateien aus einer Textdatei zu verarbeiten, die bereits existiert. – drewrockshard
Die Antwort auf alle Fragen beginnend, * "In Perl, ¿kann ich tun ...?" * Ist ** "¡Ja!" ** Die Antwort auf einige von diesen geht jedoch weiter mit ** "Ja, aber ...". ** – tchrist