Sebagai kelanjutan dari skrip yang saya jalankan, mengerjakan yang berikut ini.

Saya memiliki file CSV yang memiliki informasi berformat, contoh sebagai berikut:

File bernama Import.csv:

Name,email,x,y,z
\I\RS\T\Name1\c\x,email@jksjks,d,f
\I\RS\T\Name2\d\f,email@jsshjs,d,f
...

File ini berukuran besar.

Saya juga memiliki file lain bernama Note.txt.

Name1
Name2
Name3
...

Dengan bantuan dari @mathias-r-jessen

$Dir = PathToFile
$import = Import-Csv $Dir\import.csv
$NoteFile = "$Dir\Note.txt"
$Note = GC $NoteFile

$Import |Where-Object {$Note -contains $_.Name.Split('\')[4]} |Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append

Kode ini dengan cepat dan mudah mem-parsing csv besar dan mengekstrak setiap baris yang berisi salah satu baris dalam file $note.

Pertanyaan saya selanjutnya adalah bagaimana cara mencatat baris apa pun di file $note yang tidak ditemukan di file csv.

Saya mencoba yang berikut ini:

$result = $Import |Where-Object {$Note -contains $_.Name.Split('\')[4]} |Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append

$Note | Where-Object {$result.Name.Split('\')[4] -notcontains $Note} | out-file $dir\not-found.log -append

Ini tampaknya mengembalikan setiap baris dalam $note.

@mathias-r-jessen bantuan apa pun yang Anda berikan akan dihargai.

0
ace23 11 Maret 2017, 00:55

2 jawaban

Jawaban Terbaik

Saya menyelesaikannya dengan menggunakan yang berikut ini:

$result = $Import |Where-Object {$Note -contains $_.Name.Split('\')[4]} 

$result | Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append

$matches =  $note | where-object { $result.Name -match $_}

compare-object $note $matches |where-object {$_.SideIndicator -like "<=" | select -ExpandProperty InputObject | Out-file "$Dir\Not_found.txt" -Append
0
ace23 13 Maret 2017, 16:34

Anda dapat menggunakan Switch untuk melakukannya.

Switch($Import){
    {$Note -contains $_.Name.Split('\')[4]} {$_ | Export-Csv "$Dir\Result.csv" -NoTypeInformation -Append; continue}
    default {$_ | Export-csv "$Dir\Not-Found.csv" -NoType -Append}
}

continue pada opsi pertama membuatnya sehingga jika kasus pertama cocok, ia melakukan tindakan yang relevan, dan kemudian melanjutkan ke rekaman berikutnya. Jika kasus pertama tidak cocok, ia beralih ke tindakan default, yang mengeluarkannya ke file yang berbeda.

1
TheMadTechnician 10 Maret 2017, 22:11