Superuser

Autor Thema: Scripting Frage  (Gelesen 3291 mal)

karlnickel

  • Gast
Scripting Frage
« am: 01. März 2007, 14:13:41 »
Hallo zusammen,

eine Frage zum Scripting:
versuche momentan -leider vergebens - Komma-getrennte Textdateien zu bearbeiten ?!? Vielleicht kann mir hier jemand helfen.

1.)
ich würde gerne aus einem Zelleneintrag "Motor ..."  --> "Motor...." machen oder wahlweise die drei Punkte löschen. Habe es mit sed, awk, tr versucht, schaffe es aber nicht - bei mir kommt da immer nur murcks raus.
So was wie cat datei | tr -d '\.\.\.' löscht leider auch alle einzelnen Punkte - es handelt sich um ein englische Dateien, die auch Dezimalzahlen enthält - irgendwie blöd....

2.)
eine andere Zelle möchte ich von "/0" in "/,0" ändern....das gleiche wie oben - nur mumpitz - bei mir.

Hat wohl irgendwas mit Sonderzeichen zu tun, denke ich. Die bekomme ich aber nicht \... maskiert ?!? zu 1.) müsste tr doch eingentlich gehen, da gleiche Anzahl an Zeichen ?!? bei 2.) bin ich ratlos.

Danke schomma




sonnenblen.de - Das unabhängige Sun User Forum

Scripting Frage
« am: 01. März 2007, 14:13:41 »

claus

  • Gast
Re: Scripting Frage
« Antwort #1 am: 01. März 2007, 18:34:45 »
Hallo,

das geht zwar an deiner eigentlichen Frage vorbei, aber vielleicht hilft es dir ja (Perl ist ja meines Wissens bei jeder Solaris Installation mit dabei).

Primitivo-Lösung folgt:

#!/usr/bin/perl -w

open (FILE, "<test.txt");
my @file = <FILE>;
close FILE;

foreach (@file)
{
        if ($_ =~ /(Motor\.\.\.)/)
        {
                my $str = $1;
                s/$str/Motor/;
        }
}

open (FILE2, ">test2.txt");
print FILE2 @file;
close (FILE2);

Für den zweiten Fall ist es analog: einfach noch ein if ($_ ....) und dann eben ersetzen durch dein gewünschtes Ergebnis.


Claus

karlnickel

  • Gast
Re: Scripting Frage
« Antwort #2 am: 01. März 2007, 19:41:36 »
Hallo Claus !

Vielen Dank erstmal.
Ich arbeite in einer Strahlentherapie, unser Planungssystem läuft auf einer SunFire- da arbeiten wir mit einer total abgespeckten Version von Solaris. Ich müßte das also mit einem Shell Skript irgendwie erschlagen....dazu vielleicht noch eine Idee ??

Grüße
Ingo

Offline meik

  • Sobl Bachelor
  • ***
  • Beiträge: 187
Re: Scripting Frage
« Antwort #3 am: 02. März 2007, 09:38:10 »
Hallo zusammen,

eine Frage zum Scripting:
versuche momentan -leider vergebens - Komma-getrennte Textdateien zu bearbeiten ?!? Vielleicht kann mir hier jemand helfen.

1.)
ich würde gerne aus einem Zelleneintrag "Motor ..."  --> "Motor...." machen oder wahlweise die drei Punkte löschen. Habe es mit sed, awk, tr versucht, schaffe es aber nicht - bei mir kommt da immer nur murcks raus.
So was wie cat datei | tr -d '\.\.\.' löscht leider auch alle einzelnen Punkte - es handelt sich um ein englische Dateien, die auch Dezimalzahlen enthält - irgendwie blöd....

Du musst die Punkte escapen, da die sonst in einer regexp als Platzhalter betrachtet werden. Also so etwas wie

sed -e 's/Motor\ \.\.\./Motor..../'
Zitat
2.)
eine andere Zelle möchte ich von "/0" in "/,0" ändern....das gleiche wie oben - nur mumpitz - bei mir.

Auch da mußt du den Slash escapen:

sed -e 's/\/0/\/,0/'
Zitat
Hat wohl irgendwas mit Sonderzeichen zu tun, denke ich. Die bekomme ich aber nicht \... maskiert ?!? zu 1.) müsste tr doch eingentlich gehen, da gleiche Anzahl an Zeichen ?!? bei 2.) bin ich ratlos.

Nein, tr ersetzt ein einzelnes Zeichen durch ein anderes Zeichen. Mit sed kannst du eine Zeichenkette durch eine andere ersetzen, mit (n)awk kannst du die Datei feldweise bearbeiten, z.B. wenn in anderen Spalten die Daten nicht angerührt werden sollen. Da fällt dann auch ein Teil der Escapes weg:

# cat test.txt
1,2,Motor ...,4,5
1,2,Motor... ,4,5
1,2,Motor....,4,5
1,/0,3,4,5
1,2,/0,4,5
1,asdf/0asdf,3,4,5
# cat test.awk
BEGIN   { FS="," ; OFS="," }
$3 == "Motor ..." { $3="Motor...." }
$2 == "/0" { $2="/,0" }
        { print }
# awk -f test.awk  test.txt
1,2,Motor....,4,5
1,2,Motor... ,4,5
1,2,Motor....,4,5
1,/,0,3,4,5
1,2,/0,4,5
1,asdf/0asdf,3,4,5
#

Das ist zwar jetzt auf die Schnelle unter Linux getestet, mit nawk unter Solaris sollte das aber genauso gehen.

Der Ansatz von claus mit Perl ist ähnlich (Perl ist ja von den Ursprüngen her ein aufgebohrtes Awk), obwohl man das mit -n noch kürzer hinbekommen könnte. ;-)

Alle Klarheiten beseitigt? :-)

Zitat
Danke schomma

Bitte. Ist eine nette Abwechslung. :-)

claus

  • Gast
Re: Scripting Frage
« Antwort #4 am: 02. März 2007, 12:06:56 »
Natürlich geht das kürzer, aber um so etwas kümmere ich mich meistens nicht, da es a) funktionieren und b) lesbar sein soll, ja, das geht in Perl, man sollte es kaum glauben.

Ich hatte die ursprüngliche Frage ein wenig missverstanden, deswegen hier ein wenig RegEx Information:

http://de.selfhtml.org/perl/sprache/regexpr.htm


http://www.regular-expressions.info/.

Was ich jedoch nicht verstehe: Solaris kommt doch immer mit Perl, das sollte man doch eigentlich gar nicht entfernen (IIRC, weil einige Systemtools darauf zugreifen)?

Claus

Offline meik

  • Sobl Bachelor
  • ***
  • Beiträge: 187
Re: Scripting Frage
« Antwort #5 am: 02. März 2007, 12:43:49 »
Natürlich geht das kürzer, aber um so etwas kümmere ich mich meistens nicht, da es a) funktionieren und b) lesbar sein soll, ja, das geht in Perl, man sollte es kaum glauben.

:-)

Ich dachte jetzt auch weniger an obskuren Sonderzeichenorgien, sondern an "perl -p", damit würde sich das Programm auf das Innere der Schleife reduzieren.

Zitat
Was ich jedoch nicht verstehe: Solaris kommt doch immer mit Perl, das sollte man doch eigentlich gar nicht entfernen (IIRC, weil einige Systemtools darauf zugreifen)?

Ja, ein Perl müßte bei Solaris auch im kleinsten Install-Cluster dabei sein. Ich habe aber gerade keine Installationsmedien zur Hand, um das zu prüfen.

karlnickel

  • Gast
Re: Scripting Frage
« Antwort #6 am: 02. März 2007, 16:05:46 »
war mein fehler - perl ist drauf.

nichts desto trotz VIELEN DANK für die Hilfe.
habe es mit sed... erstklassig hinbekommen. Das mit den RegExs war mir schon klar...nur an der Umsetzung scheiterte es...hab den Wald vor lauter \/\/ nicht mehr gesehen ?!

Danke nomma und schönes Wochenende

Offline Padde

  • Sobl Bachelor
  • ***
  • Beiträge: 135
  • Hier könnte Ihre Werbung stehen!
Re: Scripting Frage
« Antwort #7 am: 04. März 2007, 12:32:26 »
Man kann den Wald aus \/\/ auch etwas auslichten, indem man einfach ein anderes Trennzeichen verwendet:

sed -e 's:/0:/,0:'
Ansonsten ist ja schon alles gesagt.