per batch zeilennummern in .txt datei löschen

Gast #2188462
Lesenswert?

Hallo miteinander,

ich möchte per batch aus einer Textdatei die Nummer vor dem ersten 
Semikolon entfernen und durch eine fortlaufende Nummer ersetzen.

1;3645153001;-25541;5239;Argon 100%
4;3645137001;-77935;9498;Argon 100%
10;3645137001;-77935;9498;Argon 100%
99;3645137001;-77935;9498;Argon 100%
103;3645137001;-77935;9498;Argon 100%

Würde mich freuen, wenn mir jemand dabei helfen kann.
Danke und Gruß
Müngg
Gast #2188474
Lesenswert?

Falls du mit "batch" die Windoof-Stapelverarbeitung meinst, damit kann 
ich nicht dienen.

Ansonsten:
1
#Perl
2
use strict;
3
use warnings;
4

5
my $nb=0;
6

7
foreach (<>)
8
{
9
  s/^[0-9]*;/$nb;/;
10
  print;
11
  $nb++;
12
}
Ein+Ausgabe über stdin+out.
Gast #2188495
Lesenswert?

Achso, sag das doch gleich. Ich dachte die eigentliche Verarbeitung muss 
mittels .bat geschehen.

Pack den Perl-Code in eine Textdatei, ändere die Endung in .pl und pack 
eine .bat-Datei dazu:
1
@echo off
2
perl convert.pl < liste.txt > ergebnis.txt
3
echo fertig
4
pause
Perl-Interpreter muss natürlich installiert sein, wenn er nicht gefunden 
wird Umgebungsvariable "PATH" ändern. Dateinamen müssen natürlich 
angepasst werden.
Persönliche Seite #2188598
Lesenswert?

Mit mehreren Schritten geht es auch mit 
Windows-Kommandozeilen-Bordmitteln.

Erster Schritt:
Inhalt der ersten Spalte entsorgen
1
FOR /F "tokens=2,* delims=;" %i in (quelle.txt) do @echo ;%i;%j >> temp1.txt

Ergibt:
1
;3645153001;-25541;5239;Argon 100%
2
;3645137001;-77935;9498;Argon 100%
3
;3645137001;-77935;9498;Argon 100%
4
;3645137001;-77935;9498;Argon 100%
5
;3645137001;-77935;9498;Argon 100%

Zweiter Schritt:
aufsteigende Zeilennummern voranstellen
1
findstr /n ; temp1.txt > temp2.txt

Ergibt:
1
1:;3645153001;-25541;5239;Argon 100%
2
2:;3645137001;-77935;9498;Argon 100%
3
3:;3645137001;-77935;9498;Argon 100%
4
4:;3645137001;-77935;9498;Argon 100%
5
5:;3645137001;-77935;9498;Argon 100%

Dritter und letzter Schritt:
Doppelpunkt loswerden
1
FOR /F "tokens=1,* delims=:" %i in (temp2.txt) do @echo %i%j >> ziel.txt

Ergibt:
1
1;3645153001;-25541;5239;Argon 100%
2
2;3645137001;-77935;9498;Argon 100%
3
3;3645137001;-77935;9498;Argon 100%
4
4;3645137001;-77935;9498;Argon 100%
5
5;3645137001;-77935;9498;Argon 100%

Ganz wichtig hierbei: Die Dateien temp1.txt und ziel.txt müssen vor 
Aufruf leer sein bzw. nicht existieren, da der for-Output nur angehängt 
wird.


Nein, elegant ist was anderes.
Gast #2189128
Lesenswert?

Es geht auch mit Excel falls noch andere Funktionen nötig sind.

Mach aus Deiner.txt eine Deiner.csv, lies diese in Excel und lass die 
erste Spalte weg oder numeriere/bearbeite sie und speichere sie als 
neue.csv
und ren neue.csv neue.txt
#2189937
Lesenswert?

wenn du sowas öfters machst, ist trotzdem zu empfehlen, dass du dich mit 
den typischen Linux-Kommandozeilentools wie grep, sed, xargs 
außeinandersetzt (--> GnuWin32) oder dich mit Perl beschäftigst.
hier kommt man auch nur mit den Grundlagen ( skalar, array, hash, 
Dateihandling, Schleife, Reguläre Ausdrücke) sehr weit. ist dann 
vielleicht oft nicht das optimalste oder schnellste, aber meistens 
reicht es auch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren