dringend Script benötigt

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
DebiRo
Beiträge: 28
Registriert: 23.01.2005 01:30:05

dringend Script benötigt

Beitrag von DebiRo » 24.03.2006 15:58:59

Hallo,
Ich brauche dringen ein script, das funktioniert, da ich es hier nicht testen kann, und dort wo ich es brauch nicht viel Zeit habe und kein Internet vorhanden ist.

Ich habe eine Datei, bei der in manchen Zeilen so ein Trennstrich ist "|" (oder mehrere mit daten dazwischen). Nun sollen die Zeilen von oben nach unten durchgegangen werden und alles was vor dem ersten | steht durch eine vortlaufende Nummerrierung ersetz werden.

z.B.

Datei vorher:

Code: Alles auswählen

Hallo
Text bla bla
3001|Musterman8|Adresse1||||
2045|Muterman9|Adresse2||||
4|Musterman10|Adresse3|München|||
Text bla bla
Datei soll so aussehen:

Code: Alles auswählen

Hallo
Text bla bla
1|Musterman8|Adresse1||||
2|Muterman9|Adresse2||||
3|Musterman10|Adresse3|München|||
Text bla bla
Wär echt super, wenn ich schnell eine Antwort bekomme

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 24.03.2006 16:50:05

Code: Alles auswählen

awk  'BEGIN {FS="|"; OFS="|"} /\|/ {n=n+1; $1=n} {print}' Datei > NeueDatei

DebiRo
Beiträge: 28
Registriert: 23.01.2005 01:30:05

Beitrag von DebiRo » 24.03.2006 16:55:23

Vielen vielen Dank. Werde dass dann mal gleich probieren. Wenn es geht (was ich denke), werde ich dich bestimmt noch mit fragen überhäufen, da ich da im Moment nicht durchblicke.

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 24.03.2006 17:09:10

Code: Alles auswählen

#!/usr/bin/perl

my $counter= 0;

while (<>) {
  my $line= $_;
  if ($line=~ /\|/) {
    $counter++;
    $line=~ s/^.*?\|/$counter\|/;
  }
  print $line;
}
Als foo.pl speichern, "perl foo.pl < Datei > NeueDatei"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 24.03.2006 21:40:37

Fehlt noch ein Perl Oneliner:

Code: Alles auswählen

gms@gms1:~$ perl -pe 's/^[^|]+\|(?{++$n})/$n\|/' Datei >NeueDatei
gms@gms1:~$ cat NeueDatei
Hallo
Text bla bla
1|Musterman8|Adresse1||||
2|Muterman9|Adresse2||||
3|Musterman10|Adresse3|München|||
Text bla bla
Gruß
gms

Antworten