Anzahl Kommatar zählen

N

nibbel

Grünschnabel
Moin Leute.
Ich muss hier noch ein kleines Bashscript schreiben. Hab mir dazu einige mans druchgelesen und bin praktisch schon fertig.
Ich muss nur noch eine while schleife einbauen. Der Inhalt dafür ist auch schon bereit. Nur das Argument für die Schleife will mir noch nicht so richtig einfallen.

Nun hatte ich die idee, die while durch eine for zu ersetzen.
Ich muss aber die anzahl haben, wie weit er zählen darf.
Dafür will ich eine datei auslesen die so aufgebaut ist:

Code:
text,text,text,text
text,text
text,text,text,text,text,text

Nun will ich einfach immer von der letzten Zeile die Kommas zählen lassen und diesen integerwert an die forschleife geben. Damit diese dann so oft ihren inhalt durch geht.

mit
Code:
tail -n1 text.liste

würde ich die letzte Zeile auslesen und dann muss ich noch die kommas lesen und in eine Variable packen. Das würde ich dann so machen:

Code:
variable=$(tail -n1 text.liste |cut -d, ????)

ich weiss wie ich mit cut den text form ersten komma oder nach oder nach dem 3ten da rein schreibe. Aber wie die anzahl der Kommatas?
Hat da wer ne Idee? Wäre echt nett, danke!
 
Code:
tail -n2 text.liste | grep -o ',' | wc -l
Waere fuer mich jetzt die Hausfrauen-Antwort... aber die anderen Code werden bestimmt jetzt mit Useless-use-of-X (geht sicher auch irgendwie ohne die | aber... *psst*) nach mir werfen :)

In before Wolfgang: Bitte gibt deine verwendete Shell/Distribution an.
 
Zuletzt bearbeitet:
Bitte weise doch darauf hin, dass das ein Crossposting ist.
Dort habe ich dir schon einen Hinweis auf IFS gegeben.
 
oder wie wäre es damit?

Code:
echo "text1,text2,text3,text4" | sed s/,/" "/g  | wc -w

hast zwar nicht die Anzahl der Kommas, aber Anzahl der Worte
 
Zuletzt bearbeitet:
Code:
echo foo,bar,baz,ein text mit leerzeichen,nej|perl -ne 'print scalar $_ =~ tr/,/,/'

So kann man das perl-tr benutzen, um die Kommata zu zählen.
Siehe auch perlop.
(Bei y/// und tr///)
Das Beispiel ist übrigens extra-explizit, es geht auch einfach:
Code:
echo foo,bar,baz,ein text mit leerzeichen,nej|perl -ne 'print tr/,/,/'
 
Und man kann am Ende noch weitere 30 Prozesse aufrufen, um zum gleichen trivialen Ergebnis zu kommen. ;)
Wenn schon, warum nicht eine reine perl-Lösung für das Problem?
Oder eine reine sed-Lösung für das Problem?
Code:
sed -ne '${s/,/\n/g;p}' input >output
 

Ähnliche Themen

bash: Fehlermeldung und Werte in Array sortieren?

Logfile in Mysql?

Zurück
Oben