Möglichkeit Datensplittung über Shell-Skript
Abend in die Runde,
habe da eine Frage, vielleicht kann mir jemand helfen. Gibt es eine Möglichkeit folgendes über ein Shell-Skript abzubilden?
-> Eingangsdatei (.txt) mit Inhalt von Zahlen getrennt durch 2 Punkte: 50000..100000 -> 50000 einzelne Zahlen
-> in einer Ausgangsdatei (.txt) sollten die Zahlen aufgetrennt sein, immer in 1000 Schritten -> 50000..50999;51000..51999;52000..52999;
Wenn die 100000 erreicht sind, sollte das Skript stoppen....Kann mir wer sagen, ob so etwas möglich ist?
Beste Grüße....
habe da eine Frage, vielleicht kann mir jemand helfen. Gibt es eine Möglichkeit folgendes über ein Shell-Skript abzubilden?
-> Eingangsdatei (.txt) mit Inhalt von Zahlen getrennt durch 2 Punkte: 50000..100000 -> 50000 einzelne Zahlen
-> in einer Ausgangsdatei (.txt) sollten die Zahlen aufgetrennt sein, immer in 1000 Schritten -> 50000..50999;51000..51999;52000..52999;
Wenn die 100000 erreicht sind, sollte das Skript stoppen....Kann mir wer sagen, ob so etwas möglich ist?
Beste Grüße....
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 444849
Url: https://administrator.de/forum/moeglichkeit-datensplittung-ueber-shell-skript-444849.html
Ausgedruckt am: 03.04.2025 um 08:04 Uhr
10 Kommentare
Neuester Kommentar

Zitat von @freshman2017:
habe da eine Frage, vielleicht kann mir jemand helfen. Gibt es eine Möglichkeit folgendes über ein Shell-Skript abzubilden?
-> Eingangsdatei (.txt) mit Inhalt von Zahlen getrennt durch 2 Punkte: 50000..100000 -> 50000 einzelne Zahlen
-> in einer Ausgangsdatei (.txt) sollten die Zahlen aufgetrennt sein, immer in 1000 Schritten -> 50000..50999;51000..51999;52000..52999;
Wenn die 100000 erreicht sind, sollte das Skript stoppen....Kann mir wer sagen, ob so etwas möglich ist?
habe da eine Frage, vielleicht kann mir jemand helfen. Gibt es eine Möglichkeit folgendes über ein Shell-Skript abzubilden?
-> Eingangsdatei (.txt) mit Inhalt von Zahlen getrennt durch 2 Punkte: 50000..100000 -> 50000 einzelne Zahlen
-> in einer Ausgangsdatei (.txt) sollten die Zahlen aufgetrennt sein, immer in 1000 Schritten -> 50000..50999;51000..51999;52000..52999;
Wenn die 100000 erreicht sind, sollte das Skript stoppen....Kann mir wer sagen, ob so etwas möglich ist?
Grundsätzlich JA, alles was man mit Textdateien so anstellen kann, kann man auch entsprechend formatiert wieder ausgeben lassen.
Dazu aber ein paar Fragen da diese leider nicht deutlich aus der Fragestellung hervorgehen.
Gibt es eine Möglichkeit folgendes über ein Shell-Skript abzubilden?
- Was interpretierst du als Shell-Script? Bash/CMD/Powershell/Python/Perl ... ??
-> Eingangsdatei (.txt) mit Inhalt von Zahlen getrennt durch 2 Punkte: 50000..100000 -> 50000 einzelne Zahlen
- Wie sieht die Eingangsdatei exakt aus, laut deiner Schilderung könnte diese z.B.
50000..50100..50334..61004..61555..61888
50000..50100
50334..61004
50634..62004..61555..61888
> -> in einer Ausgangsdatei (.txt) sollten die Zahlen aufgetrennt sein, immer in 1000 Schritten -> 50000..50999;51000..51999;52000..52999;
- Die Ausgangsdatei, sollen dort die Zahlen genau wie in der Eingangsdatei hinterlegt werden und nur mit Semikolon getrennt? Oder nur den niedrigsten und den höchsten Wert der jeweilgen tausender Serie mit ".." getrennt voneinander und diese dann per Semikolon getrennt? Denn in deinem Beispiel sieht das so aus, kann mich natürlich täuschen.
Also wenn ich mein Beispiel von oben nehme in der Ausgangsdatei so:
50000..50100..50334;61004..61555..61888
50000..50334;61004..61888
Auf gut Glück so wie ich das interpretiert habe, kippe ich dir hier mal ein Bash-Einzeiler dafür hin:
#!/bin/bash
for x in $(grep -Po '\d+' /path/testdatei.txt | sort -n) ;do current=$(($x/1000)); if [[ -z "$last" ]];then last=$current;fi;if [[ $last -eq $current ]];then echo -n "..$x";else echo -n ";$x" ;fi; last="$current" ;done | cut -d. -f3-
Ciao.
Probier's so:
Steffen
@echo off &setlocal EnableDelayedExpansion
set "infile=test.txt"
set "outfile=test2.txt"
set "step=1500"
for /f "usebackq tokens=1,2 delims=." %%i in ("%infile%") do set /a "begin=%%i, end=%%j"
set "s=%begin%.."
set /a "begin+=step, n=begin"
for /l %%i in (%begin% %step% %end%) do (
set /a "n=%%i-1"
set "s=!s!!n!;%%i.."
set /a "n=%%i"
)
if %n%==%end% (set "s=%s:~,-2%") else set "s=%s%%end%"
>"%outfile%" echo %s%
Das was du hier tust nennt sich Scope Creeping. Ich bin dann auch mal weg ...
@echo off &setlocal EnableDelayedExpansion
set "infile=test.txt"
set "outfile=test2.txt"
set "step=1500"
set "txt=TEST"
for /f "usebackq tokens=1,2 delims=." %%i in ("%infile%") do set /a "begin=%%i, end=%%j"
set "s=%txt%;%begin%.."
set /a "n=begin, begin+=step"
for /l %%i in (%begin% %step% %end%) do (
set /a "d=%%i-n, n=%%i-1"
set "s=!s!!n!;!d!;%txt%;%%i.."
set /a "n=%%i"
)
set /a "d=end-n+1"
if %n%==%end% (set "s=%s:~,-2%;%d%;") else set "s=%s%%end%;%d%;"
>"%outfile%" echo %s%