Moin,
Eine ganz blöde Frage: File liegt vor in der Form:
<snip> un.g.rth.trhg.th.erh gd.hed.rthrt.etrfh.thr ethg.ghedrt.heht.eheth.e wtrhe.wthezh.wtth.wehe <snap>
Ich suche eine Möglichkeit (in bash), die Punkte pro Zeile zu zählen und die Ergebnisse wieder in ein neues File zu stecken. Danach sollte noch die Maximalzahl der Punkte, die in einer Zeile vorkommen, herausgefunden werden. Gibts was Einfacheres, als das Ergebnis von Aufgabe 1 in ein Zahlenarray zu stecken und die Zellen dann einzeln zu vergleichen?
H.
On Thu, Jan 03, 2002 at 12:10:56AM +0100, Hilmar Preusse wrote:
Moin,
Eine ganz blöde Frage: File liegt vor in der Form:
<snip> un.g.rth.trhg.th.erh gd.hed.rthrt.etrfh.thr ethg.ghedrt.heht.eheth.e wtrhe.wthezh.wtth.wehe <snap>
Ich suche eine Möglichkeit (in bash), die Punkte pro Zeile zu zählen und die Ergebnisse wieder in ein neues File zu stecken. Danach sollte noch die Maximalzahl der Punkte, die in einer Zeile vorkommen, herausgefunden werden. Gibts was Einfacheres, als das Ergebnis von Aufgabe 1 in ein Zahlenarray zu stecken und die Zellen dann einzeln zu vergleichen?
Lösung zur 2. Aufgabe: sed s/[^.]//g | wc -L
sonst eventuell sed s/[^.]//g|sort|tail -1|wc|awk '{print $3-1}' :-)
fürs Zeichen zählen nach dem sed hab ich auf die Schnelle keine Idee
Reinhard
On Thu, Jan 03, 2002 at 10:40:17AM +0100, Reinhard Foerster wrote:
On Thu, Jan 03, 2002 at 12:10:56AM +0100, Hilmar Preusse wrote: Lösung zur 2. Aufgabe: sed s/[^.]//g | wc -L
sonst eventuell sed s/[^.]//g|sort|tail -1|wc|awk '{print $3-1}' :-)
meine Lösung zu 1. fehlte noch:
pipen durch: sed s/[^.]//g |while read x; do echo ${#x}; done;
Reinhard
Hi Hilmar,
On Thu, Jan 03, 2002 at 00:10:56 +0100, Hilmar Preusse wrote:
Ich suche eine Möglichkeit (in bash), die Punkte pro Zeile zu zählen und die Ergebnisse wieder in ein neues File zu stecken. Danach sollte noch die Maximalzahl der Punkte, die in einer Zeile vorkommen, herausgefunden werden. Gibts was Einfacheres, als das Ergebnis von
Wenn Du bash mit Hilfsmitteln wie tr und wc meinst, geht es so:
#!/bin/bash max=0 : > pnum.txt while read ln do pts=`echo $ln | tr -dc . | wc -c` echo $pts >> pnum.txt [ $max -lt $pts ] && max=$pts done < points.txt echo "Maximale Punktzahl: $max"
Das Skript liest aus points.txt und schreibt in pnum.txt. Sollte eigentlich auch mit ner normalen Bourne Shell laufen. Wozu brauchst Du die Punktzahlen in einer extra Datei? Fuer die Bestimmung des Maximums ist sie jedenfalls nicht noetig.
bye, Chris
On 03.01.02 Christian Perle (perle@itm.tu-clausthal.de) wrote:
Moin,
Wenn Du bash mit Hilfsmitteln wie tr und wc meinst, geht es so:
<snip>
Das Skript liest aus points.txt und schreibt in pnum.txt. Sollte eigentlich auch mit ner normalen Bourne Shell laufen. Wozu brauchst Du die Punktzahlen in einer extra Datei?
Finalerweise soll eine Quadratmatrik daraus werden, wobei die Punkte als Trenner zwischen den Spalten gelten also so:
fb.bndf... rgm.hdnh.thif.zjhkzi.jtu gndbnf.htm.gr.hjih.
Spalten die leer sind, sollen so bleiben. Dazu hielt ich es für günstig, die Anzahl der Punkte pro Zeile aufzuheben, um mittels des Maximums die Zahl der fehlenden Punkte zu berechnen. Heute habe ich dann daran herumgetüftelt, wie man die dann mittels sed in die Zeile reinschiebt, bin aber irgendwie zu keinem Ergebnis gekommen. Na ja, morgen ist auch noch ein Tag. Danke bis hierhin auch an Reinhard.
H.
On Fri, Jan 04, 2002 at 12:34:04AM +0100, Hilmar Preusse wrote:
Finalerweise soll eine Quadratmatrik daraus werden, wobei die Punkte als Trenner zwischen den Spalten gelten also so:
fb.bndf... rgm.hdnh.thif.zjhkzi.jtu gndbnf.htm.gr.hjih.
Spalten die leer sind, sollen so bleiben. Dazu hielt ich es für günstig, die Anzahl der Punkte pro Zeile aufzuheben, um mittels des Maximums die Zahl der fehlenden Punkte zu berechnen. Heute habe ich dann daran herumgetüftelt, wie man die dann mittels sed in die Zeile reinschiebt, bin aber irgendwie zu keinem Ergebnis gekommen. Na ja, morgen ist auch noch ein Tag. Danke bis hierhin auch an Reinhard.
Ich hoffe es nun richtig verstanden zu haben ... Christians Beispiel weitergesponnen:
#!/bin/bash infile=data outfile=data.out
max=0 while read ln do pts=`echo $ln | tr -dc . | wc -c` [ $max -lt $pts ] && max=$pts done < $infile
while read ln do buf='' i=0 pts=`echo $ln | tr -dc . | wc -c` newpts=$(($max-$pts)) while [ $i -lt $newpts ] do buf=$buf. i=$((i+1)) done echo $ln$buf >> $outfile done < $infile
Reinhard
On 04.01.02 Reinhard Foerster (rf11@inf.tu-dresden.de) wrote:
Moin,
Ich hoffe es nun richtig verstanden zu haben ... Christians Beispiel weitergesponnen:
<snip> Gut. Danke erstmal bis hierhin und eigentlich wollte ich den Rest selber machen... *Fußaufstampf* So ganz die Wahrheit gesagt habe ich doch nicht, so daß ich Dein Beispiel nicht 1:1 übernehmen kann :-P . Aber ich denke, den Rest kriege ich schon alleine hin. Bei Problemen melde ich mich halt wieder.
Gruß, H.
lug-dd@mailman.schlittermann.de