Thread system ` cat test.txt | grep name` (4 answers)
Opened by thomas at 2009-03-22 21:10

Linuxer
 2009-03-22 21:19
#119697 #119697
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Warum willst Du dafür überhaupt eine Pipe benutzen? wc kann Dateien auch selber lesen!

Ansonsten sollte man $a nicht als normale Variable verwenden.
Sie ist vordefiniert und eigentlich für den Einsatz beim Sortieren gedacht.

Dann ist system() auch der falsche Befehl dafür. Er liefert Dir den Exitcode des ausgeführten Kommandos zurück, nicht seine Ausgabe.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#! /usr/bin/perl
use strict;
use warnings;

# entweder
my $lines = qx{ wc -l test.txt };

# oder alles in Perl
my $lines = 0;
open my $fh, '<', 'test.txt' or die "test.txt: open failed: $!\n";
$lines++ while ( <$fh> );
close $fh;


edit/Nachtrag:

Was mir gerade erst auffällt:

Du willst cat test.txt | wc -l mittels Backticks ausführen lassen und das erhaltene Resultat (die Zeilenanzahl) als Kommando von system() ausführen lassen? Und das auch noch ohne abschließendes Semikolon...
Ich wär froh, daß da ein Syntaxfehler geworfen wurde ;o)

Mir scheint, Dir ist nicht wirklich klar, was Du da eigentlich tun willst/musst...
Also entweder system() oder exec() ODER Backticks oder qx{};
Je nachdem, was Du machen willst, nimmst Du das entsprechende.
system() führt ein Kommando aus und liefert den Exitcode zurück.
exec() führt ein Kommando aus; Mit Ausführung ist das Skript "beendet" (einfach ausgedrückt).
qx{} und Backticks sind netterweise austauschbar und liefern die Ausgabe des ausgeführten Kommandos; qx{} ist dabei klarer zu lesen.

perldoc -f system
perldoc -f exec
perldoc perlop; /`STRING`
perldoc -f qx

Übrigens bietet das "Perl Kochbuch" im Kapitel 8.2. (Counting Lines (or Paragraphs or Records) in a File) genau zu diesem Thema Lösungen...



Last edited: 2009-03-22 21:40:06 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread system ` cat test.txt | grep name`