sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
FloX
Beiträge: 3
Registriert: 25.07.2003 18:24:23

sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Beitrag von FloX » 18.05.2011 16:59:43

Hallo Forum,

ich habe viele Dateien mit noch mehr Zeilen mit folgendem Inhalt: alle Zeilen haben die gleiche Zeichenanzahl
14473023.47000008040775285.805.6500.7122.0302.33340000

Die ";" werden gesetzt nach 2-2-2-5-4-4-4-5-5-5-5-5-1-1-2-1-1 Diese soll nach Anwenden von sed wie folgt aussehen
14;47;30;23.47;0000;0804,0775,285.8,05.65,00.71,22.03,02.33,3,4,00,0,0

Ich löse das Einfügen der ";" über unten genannten Ansatz, was auch zum gewünschten Erfolg führt.

Gibt es hierzu einen performanteren Ansatz, der relativ zum zuvor gesetzten Trennzeichen das nächste setzt?

sed \
-e 's/\(..\)/\0;/' \
-e 's/\(.....\)/\0;/' \
-e 's/\(........\)/\0;/' \
-e 's/\(..............\)/\0;/' \
-e 's/\(...................\)/\0;/' \
-e 's/\(........................\)/\0;/' \
-e 's/\(.............................\)/\0;/' \
...
...

Gruß
FloX

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Beitrag von MustrumRidcully » 19.05.2011 14:26:38

warum nicht quick & dirty mit der shell?

Code: Alles auswählen

# create an example file:
tline="14473023.47000008040775285.805.6500.7122.0302.33340000"
echo $tline >example.txt
for bla in a b e r d o c h n i c h t s o u m s t a e n d l i c h; do vline=${tline//0/$bla}; echo $vline >>example.txt; done
und nu:

Code: Alles auswählen

pattern="2 2 2 5 4 4 4 5 5 5 5 5 1 1 2 1 1"
lines=$(cat example.txt)
for tline in $lines; do outline=""; sumdings=0; for dings in $pattern; do tvar=${tline:$sumdings:$dings}; if [ -z $outline ]; then outline=$tvar; else outline=$outline';'$tvar; fi; sumdings=$((sumdings+dings)); done; echo $outline; done
8)
Volk ist Opium für eine Religion.

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Beitrag von Meillo » 19.05.2011 23:30:42

Das Problem ist wirklich ein wenig doof. ;-)

Ich bin auf nichts besseres als das gekommen:

Code: Alles auswählen

awk '
BEGIN {
        split("2 2 2 5 4 4 4 5 5 5 5 5 1 1 2 1 1", parts)
        OFS=";"
}

{
        line=$0
        for (i=1; i<=length(parts); i++) {
                $i = substr(line, pos+1, parts[i])
                pos += parts[i]
        }
        print
}
'
Use ed once in a while!

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Beitrag von MustrumRidcully » 20.05.2011 02:11:25

bash rulz! *g*
Volk ist Opium für eine Religion.

FloX
Beiträge: 3
Registriert: 25.07.2003 18:24:23

Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Beitrag von FloX » 20.05.2011 14:59:18

Vielen Dank für eure beiden Ansätze :)

Der "quick and dirty" Ansatz ist nicht so mein Fall :-)

Mit awk hab ich bisher noch nie gearbeitet. Sieht aber so aus wie ich es in c gemacht hätte.

Gruß
FloX

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Beitrag von MustrumRidcully » 22.05.2011 19:25:00

den q&d ansatz brauchste nur zu copy'en und pasten. der ist getestet. 8)
statt "example.txt" schreibst du dein ausgangsfile, und "echo $outline" leitest du um in deine ausgangsdatei: "echo $outline >>my_results.txt". echt easy. ich schreib dir auch gerne mal ein richtiges script dazu, wenn's nicht grad vorgestern passiert sein soll.
Volk ist Opium für eine Religion.

FloX
Beiträge: 3
Registriert: 25.07.2003 18:24:23

Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen

Beitrag von FloX » 23.05.2011 13:17:22

Vielen Dank für das Angebot,

Ich nutze zur Zeit noch meine sed variante, funktioniert soweit auch, also von daher keine Eile oder Hektik. :roll:

Antworten