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-Key: 483906

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

Printed on: April 23, 2024 at 13:04 o'clock

Member: Lochkartenstanzer
Lochkartenstanzer Aug 10, 2019 at 14:46:21 (UTC)
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
Member: freshman2017
freshman2017 Aug 10, 2019 at 15:26:24 (UTC)
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.
Member: BassFishFox
Solution BassFishFox Aug 10, 2019 at 20:00:37 (UTC)
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: -> How can I mark a post as solved?

Gruss BFF
Mitglied: 140777
140777 Aug 13, 2019 at 09:07:49 (UTC)
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