Archiv verlassen und diese Seite im Standarddesign anzeigen : sed(?) vorkommen zählen
Ich bin garde dabei n bash-skript zu schreiben. Der ist der aktuelle Stand ist, dass ausgegeben wird:
, , ,
,
, ,
(oder mehr/weniger zeilen, oder mehr/weniger "," pro Zeile)
wie mache ich am besten daraus: ?
0 1 2
3
4 5
musketaquid
29-04-2006, 15:41
Nichts für ungut, aber was soll das heißen?
Der ist der aktuelle Stand ist, dass ausgegeben wird:
Wenn ich die Kommatas zählen will, würde ich das so machen:
count=0
for i in $(cat /file_mit_kommatas) ; do
count=$((++count))
done
ich will aber nicht die kommatas zählen, ich will jedes komma mit einer Zahl ersetzen. es soll also das 1. Komma mit 0 ersetzt werden, das 2. mit 1, das 3. mit 2 usw. dabei soll auch die Struktur der Zeilenumbrüche erhlten bleiben.
Die Ausgabe soll also so aussehen, wie in meiner Frage unten gezeigt.
Ich habe leider auch keine Idee, wie man diese Funktion benennen könnte, um nach ihr zu googlen.
klaus_harrer
29-04-2006, 17:44
Hallo
Man könnte es so machen das du einen counter erzeugst den Text in eine Variable kopieren. Mit grep die komma's zählst auch in einer Variable speichern und das ganze in eine for Schleife stecken.
for ((i=0;i<kommas;i++))
do
echo -e "$text" | sed "s/,/$count/"
done
MfG
klaus_harrer
ich habe es geschafft.
skript:
#!/bin/bash
lines=$(cat input | wc -l)
zeile=1
wert=0
for ((d=0;d<lines;d++))
do
text=$(cat input | sed -n "$(echo $zeile)p")
zeile=$((++zeile))
count=0
for i in $text
do
count=$((++count))
done
tt=$text
for ((i=0;i<count;i++))
do
stelle=1
tt=$(echo -e "$tt" | sed "s/,/$wert/$stelle")
stelle=$((++stelle))
wert=$((++wert))
done
echo $tt >> output
done
und die input und output sind so wie im ausgangspst geschrieben.
musketaquid
30-04-2006, 16:41
Die Variablen zeile und stelle kannst du weglassen und stattdessen das schreiben
text=$(cat input | sed -n "$(echo $((d + 1)))p")
...
tt=$(echo -e "$tt" | sed "s/,/$wert/$((i + 1))")
So hast du immerhin 4 Zeilen Code gespart ;)
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.