sed: Zeichen an verschiedenen Stellen pro Zeile einfügen
sed: Zeichen an verschiedenen Stellen pro Zeile einfügen
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
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
- 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
warum nicht quick & dirty mit der shell?
und nu:
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
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
Volk ist Opium für eine Religion.
Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen
Das Problem ist wirklich ein wenig doof.
Ich bin auf nichts besseres als das gekommen:
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!
- 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
bash rulz! *g*
Volk ist Opium für eine Religion.
Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen
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
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
- 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
den q&d ansatz brauchste nur zu copy'en und pasten. der ist getestet.
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.
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.
Re: sed: Zeichen an verschiedenen Stellen pro Zeile einfügen
Vielen Dank für das Angebot,
Ich nutze zur Zeit noch meine sed variante, funktioniert soweit auch, also von daher keine Eile oder Hektik.
Ich nutze zur Zeit noch meine sed variante, funktioniert soweit auch, also von daher keine Eile oder Hektik.