sonnenblen.de - Das unabhängige Sun User Forum
Betriebssysteme => Solaris => Thema gestartet von: karlnickel 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
-
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
-
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
-
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..../'
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/'
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? :-)
Danke schomma
Bitte. Ist eine nette Abwechslung. :-)
-
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://de.selfhtml.org/perl/sprache/regexpr.htm)
http://www.regular-expressions.info/ (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
-
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.
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.
-
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
-
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.