Schrift
[thread]10331[/thread]

muss perl script anpassen, hilfe!



<< >> 9 Einträge, 1 Seite
Rebel2k
 2007-09-05 17:39
#99128 #99128
User since
2007-09-05
1 Artikel
BenutzerIn
[default_avatar]
hi

mein erster Beitrag hier und gleich ne newbie frage ;)

Ich hab hier ein etwas älteres Perl Script was als cron job läuft.
Dort müsste ich eigentlich nur aus einer Text Datei etwas grep/cuten, mittels csh bekomme ich das ohne weiters hin ;)

bsp:
INPUT=/tmp/rechner.lst
// einträge haben folgende Form: lnxws1001.local.de
#cat $INPUT |grep -i lnxws |cut -d . -f1
#lnxws1001

eigentlich net schwer, aber mit perl hatte ich bisher nix am hut...

wie kann ich aus der rechner.lst eine neue .lst erzeugen die nur die eintraäge in Form von
lnxws1001
lnxws1002
usw hat, die dann weiter genutzt werden kann?
linse
 2007-09-05 19:05
#99135 #99135
User since
2006-02-02
61 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
perl -ne 'print grep /lnxws/, $_;'  /tmp/rechner.lst 

oder
Code: (dl )
1
2
3
open(IN,"/tmp/rechner.lst") or die "$!";
print grep /lnxws/,<IN> ;
close IN;

?

mfg Dirk
bloonix
 2007-09-05 19:09
#99136 #99136
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Rebel2k+2007-09-05 15:39:41--
#cat $INPUT |grep -i lnxws |cut -d . -f1

wie umständlich! ein systemaufruf zuviel :-)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
linse
 2007-09-05 19:31
#99137 #99137
User since
2006-02-02
61 Artikel
BenutzerIn
[Homepage]
user image
Das mit dem
|cut -d . -f1
check ich gar nicht .
Was ist der underschied zu
cat $INPUT |grep lnxws ?
mfg Dirk
pq
 2007-09-05 20:01
#99138 #99138
User since
2003-08-04
12207 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
open my $fh, "<", "rechner.lst" or die $!;
open my $wfh, ">", "neu.lst" or die $!;
while (<$fh>) {
my $data = (split /\./, $_)[0];
print $wfh "$data\n";
}
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Linuxer
 2007-09-06 20:48
#99158 #99158
User since
2006-01-27
3869 Artikel
HausmeisterIn

user image
@bloonix:

Naja, innerlich schrie es in mir auch "waahh, cat XX | grep " ... grep ist doch schon groß und kann selber lesen ...

Aber diese Variante kann sinnvoll sein; denn grep liest somit nur von STDIN und kann die Ausgabe nicht durch ausgegebene Dateinamen durcheinanderbringen... (auch wenn es dafür Optionen im grep geben sollte)...

Prinzipiell wäre ich auch eher bei einem:

Code: (dl )
grep -hi lnxws $INPUT | cut -d . -f 1


So kann $INPUT auch mehrere Dateien bezeichnen ohne das die Dateinamen ausgegeben werden...


@linse:

Was ist Dir unklar?

"grep lnxws" sucht im Eingabe-Stream nach Zeilen, die den String "lnxws" enthalten und gibt diese Zeilen komplett aus. "| cut -d . -f 1" nimmt danach die Ausgabe des grep, trennt sie an den Punkten auf und gibt nur das erste Feld aus...
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!
murphy
 2007-09-06 22:53
#99159 #99159
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Linuxer+2007-09-06 18:48:31--
[...] Aber diese Variante kann sinnvoll sein; denn grep liest somit nur von STDIN und kann die Ausgabe nicht durch ausgegebene Dateinamen durcheinanderbringen... (auch wenn es dafür Optionen im grep geben sollte)... [...]


Die Variante mit cat am Beginn einer Pipeline ist nie sinnvoll, denn um Daten in die Standardeingabe eines Programmes zu füttern gibt es ja den Redirektionsoperator der Shell:
Code: (dl )
grep -i lnxws <$INPUT | cut -d . -f 1


Die Lösung mit der Option -h von grep ist natürlich genauso gut.
When C++ is your hammer, every problem looks like your thumb.
Linuxer
 2007-09-06 23:49
#99161 #99161
User since
2006-01-27
3869 Artikel
HausmeisterIn

user image
murphy+2007-09-06 20:53:02--
Die Variante mit cat am Beginn einer Pipeline ist nie sinnvoll, denn um Daten in die Standardeingabe eines Programmes zu füttern gibt es ja den Redirektionsoperator der Shell:


Schön, dann mach das mal mit $INPUT und dem <-Operator in einem leicht lesbaren Einzeiler, wenn $INPUT mehrere Dateinamen bezeichnet:
Code: (dl )
 INPUT="anton.txt berta.txt caesar.txt" 


Da scheint mir die cat-Variante durchaus sinnvoll ...
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!
ptk
 2007-09-07 02:09
#99170 #99170
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
cat ist auch angenehm, wenn man stattdessen schnell mal zcat, bzcat oder lwp-request verwenden möchte und die Zeile nicht umbauen möchte.

Und das Performanceargument lasse ich nicht gelten, wer Performance möchte, sollte sowieso nicht Shellprogrammierung machen :-)
<< >> 9 Einträge, 1 Seite



View all threads created 2007-09-05 17:39.