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)
Please also mark the comments that contributed to the solution of the article
Content-Key: 291602
Url: https://administrator.de/contentid/291602
Printed on: April 27, 2024 at 00:04 o'clock
3 Comments
Latest comment
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