Anzeige:
Ergebnis 1 bis 6 von 6

Thema: sed(?) vorkommen zählen

  1. #1
    ralisi
    Gast

    sed(?) vorkommen zählen

    Ich bin garde dabei n bash-skript zu schreiben. Der ist der aktuelle Stand ist, dass ausgegeben wird:
    Code:
    , , ,
    ,
    , ,
    (oder mehr/weniger zeilen, oder mehr/weniger "," pro Zeile)

    wie mache ich am besten daraus: ?
    Code:
    0 1 2
    3
    4 5

  2. #2
    Registrierter Benutzer
    Registriert seit
    13.02.2006
    Beiträge
    47
    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:
    Code:
    count=0
    
    for i in $(cat /file_mit_kommatas) ; do
        count=$((++count))
    done

  3. #3
    ralisi
    Gast
    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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    09.10.2002
    Ort
    Berlin
    Beiträge
    110
    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

  5. #5
    ralisi
    Gast
    ich habe es geschafft.


    skript:
    Code:
    #!/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.

  6. #6
    Registrierter Benutzer
    Registriert seit
    13.02.2006
    Beiträge
    47
    Die Variablen zeile und stelle kannst du weglassen und stattdessen das schreiben
    Code:
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •