CSV kleinerer Wert (Batch)
Ich habe eine CSV Datei mit folgendem Inhalt:
29664;24,95
29664;12,95
29645;9,95
29645;9,95
29655;12,95
29655;24,95
29664;24,95
29655,12,95
29655,24,95
29664;12,95
29664;24,95
29664;24,95
29664;24,95
Jetzt brauche ich eine .batch die daraus macht:
29664;12,95
29645;9,95
29655;12,95
Also jeder Wert der 1.Spalte (1x) mit dem dazugehörigen kleinsten Wert der 2. Spalte. Kann mir jemand das Weihnachstgeschenk ;) machen und helfen? (Datei ist ca 15.000 Zeilen)
29664;24,95
29664;12,95
29645;9,95
29645;9,95
29655;12,95
29655;24,95
29664;24,95
29655,12,95
29655,24,95
29664;12,95
29664;24,95
29664;24,95
29664;24,95
Jetzt brauche ich eine .batch die daraus macht:
29664;12,95
29645;9,95
29655;12,95
Also jeder Wert der 1.Spalte (1x) mit dem dazugehörigen kleinsten Wert der 2. Spalte. Kann mir jemand das Weihnachstgeschenk ;) machen und helfen? (Datei ist ca 15.000 Zeilen)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 291602
Url: https://administrator.de/forum/csv-kleinerer-wert-batch-291602.html
Ausgedruckt am: 23.12.2024 um 12:12 Uhr
3 Kommentare
Neuester Kommentar
N'Abend,
kleines Powershell-Skript genügt
Gruß und frohes Fest.
jodel32
kleines Powershell-Skript genügt
$fileIN = 'C:\datei.csv'
$fileOUT = 'C:\datei_out.csv'
$csv = Import-csv $fileIN -Delimiter ";" -Header 1,2
$csv | %{$_.2 = [convert]::ToDouble($_.2)}
($csv | sort "2" | group "1" | %{$_.Group} | convertto-csv -Delimiter ";" -NoType | select -skip 1).replace('"','') | set-content $fileOUT
jodel32
Hallo jocheng,
da Batch keine Fließkommazahlen kennt und somit auch nicht numerisch vergleichen kann, ist Batch für dein Vorhaben ungeeignet. Nutze ein Sprache, die die entsprechenden Typen unterstützt. Sinnvollerweise eine, die auch die Verarbeitung von CSV Daten unterstützt, wie die von jodel32 vorgeschlagene PowerShell.
Grüße
rubberman
da Batch keine Fließkommazahlen kennt und somit auch nicht numerisch vergleichen kann, ist Batch für dein Vorhaben ungeeignet. Nutze ein Sprache, die die entsprechenden Typen unterstützt. Sinnvollerweise eine, die auch die Verarbeitung von CSV Daten unterstützt, wie die von jodel32 vorgeschlagene PowerShell.
Grüße
rubberman
moin jocheng,
in der Kommandozeile ein kurzer Einzeiler
hier als Batch
Gruß Phil
in der Kommandozeile ein kurzer Einzeiler
hier als Batch
setlocal
set "Infile=D:\A_test\CSVorg.csv"
set "Outfile=D:\A_test\CSV-neu.csv"
set "Tok=;"
rem lege Ausgabedatei vorher an
4>"%outfile%" call :sort
exit /b
:sort 2nd token leq
for /f "usebackdelims=%tok%" %%a in ("%Infile%") do (
<"%outfile%" find "%%a%tok%" >nul 2>nul ||(
for /f %%c in (' ^<"%infile%" find /c "%%a%tok%" ') do (
cd& <"%infile%" find "%%a" |sort /r )|more +%%c |find "%tok%" >&4
) )
exit /b
:cmdline
for %F in ("csvorg.csv") do for /f "usebackqtokens=1,2delims=;" %a in (%F) do <"%~nF-neu%~xF" find "%a;" >nul 2>&1 ||for /f %c in ('^<%F find /c "%a;"') do (echo(A& <%F find "%a") |sort /r |more +%c |find ";" >>"%~nF-neu%~xF"
Gruß Phil