freshman2017
Goto Top

Frage zu Powershell - fast perfektes Skript vorhanden

Moin moin aus dem Norden!

Ich habe gerade hier ein fast perfektes Skript für mich gefunden, komme aber nicht in der Anpassung weiter:

Doppelte Datensätze in einer CSV kennzeichnen

$quelle = 'D:\test.csv'  
$ziel = 'D:\test_out.csv'  
$numcols = (gc $quelle -head 1).split(";").count  
$csv = Import-CSV $quelle -Delimiter ";" -Header (1..$numcols)  
($csv | group '1' | %{  
    if ($_.Count -gt 1){
        $_.Group | %{$_.$numcols = 1}
        $_.Group
    }else{
        $_.Group
    }
} | ConvertTo-CSV -delimiter ";" -NoType | select -Skip 1) -replace '"','' | sc $ziel  

Wie kann ich bewirken, dass ich nachfolgende Ausgabe erhalten:
(Bei gleichem Wert in der ersten Spalte TRUE; vermerken (in der letzten Spalte) sonst FALSE; )

BANANEN;500,00;5;TRUE;
BANANEN;500,00;10;TRUE;
KIRSCHEN;45,00;10;FALSE;
ÄPFEL;5,00;50;FALSE;
125;5,00:50;FALSE;

Eingabe-CSV wie folgt:

BANANEN;500,00;5;
BANANEN;500,00;10;
KIRSCHEN;45,00;10;
ÄPFEL;5,00;50;
125;5,00:50;

Beste Grüße, freshman2017

Content-ID: 483906

Url: https://administrator.de/contentid/483906

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

Lochkartenstanzer
Lochkartenstanzer 10.08.2019 um 16:46:21 Uhr
Goto Top
Zitat von @freshman2017:

Wie kann ich bewirken, dass ich nachfolgende Ausgabe erhalten:
(Bei gleichem Wert in der ersten Spalte TRUE; vermerken (in der letzten Spalte) sonst FALSE; )

> BANANEN;500,00;5;TRUE;
> BANANEN;500,00;10;TRUE;
> KIRSCHEN;45,00;10;FALSE;
> ÄPFEL;5,00;50;FALSE;
> 125;5,00:50;FALSE;
> 

Eingabe-CSV wie folgt:

> BANANEN;500,00;5;
> BANANEN;500,00;10;
> KIRSCHEN;45,00;10;
> ÄPFEL;5,00;50;
> 125;5,00:50;
> 


Würdest Du mal ordentlich spezifizieren, anhand welcher Kriterien true oder false dastehen soll. Das hast Du offensichtlich im letzten Thread auch schon etwas ungenau gemacht.

lks
freshman2017
freshman2017 10.08.2019 um 17:26:24 Uhr
Goto Top
Zitat von @Lochkartenstanzer:

Zitat von @freshman2017:

Wie kann ich bewirken, dass ich nachfolgende Ausgabe erhalten:
(Bei gleichem Wert in der ersten Spalte TRUE; vermerken (in der letzten Spalte) sonst FALSE; )

>> BANANEN;500,00;5;TRUE;
>> BANANEN;500,00;10;TRUE;
>> KIRSCHEN;45,00;10;FALSE;
>> ÄPFEL;5,00;50;FALSE;
>> 125;5,00:50;FALSE;
>> 

Eingabe-CSV wie folgt:

>> BANANEN;500,00;5;
>> BANANEN;500,00;10;
>> KIRSCHEN;45,00;10;
>> ÄPFEL;5,00;50;
>> 125;5,00:50;
>> BANANEN;500,00;10;
>> 


Würdest Du mal ordentlich spezifizieren, anhand welcher Kriterien true oder false dastehen soll. Das hast Du offensichtlich im letzten Thread auch schon etwas ungenau gemacht.

lks

Guten Abend lks,

Anhand der ersten Spalte, wenn hier gleiche Werte drin stehen, wie an einer anderen Stelle, dann TRUE; wenn nicht FALSE.
BassFishFox
Lösung BassFishFox 10.08.2019 um 22:00:37 Uhr
Goto Top
Hi,

@freshman2017

Fehler in Zeile 5 der Quelle ausmerzen.

$quelle = 'D:\qqqtest.csv'  
$ziel = 'D:\qqqtest_out.csv'  
$numcols = (gc $quelle -head 1).split(";").count  
$csv = Import-CSV $quelle -Delimiter ";" -Header (1..$numcols)  
($csv | group '1' | %{  
    if ($_.Count -gt 1){
        $_.Group | %{$_.$numcols = "TRUE"}  
        $_.Group
    }else{
        $_.Group | %{$_.$numcols = "FALSE"}  
        $_.Group
    }
} | ConvertTo-CSV -delimiter ";" -NoType | select -Skip 1) -replace '"','' | sc $ziel  

Alles klar?

Vergiss nicht: -> Wie kann ich einen Beitrag als gelöst markieren?

Gruss BFF
140777
140777 13.08.2019 um 11:07:49 Uhr
Goto Top
So kann man es auch machen
$quelle = 'D:\qqqtest.csv'  
$ziel =  'D:\qqqtest_out.csv'  
$content = Get-Content $quelle -ReadCount 1000
$dupes = $content | %{$_.split(";")} | group -NoElement | ?{$_.Count -gt 1} | select -Expand Name  
$content | %{if ($_.split(";") -in $dupes){"$($_)TRUE;"}else{"$($_)FALSE;"}} | Set-Content $ziel