2

我有一个奇怪的问题,这是我的 CSV:

Serveur;Carte;Cordon;IP;Mac;Vmnic ;Vmnic mac;Connect;Port
Dexter;eth1;405;172.16.5.117;00:24:e8:36:36:df;Vmnic0;00:50:56:56:36:df;sw-front-1;A1
Dexter;eth2;14;192.168.140.17;00:24:e8:36:36:e1;Vmnic1;00:50:56:56:36:e1; sw_eq_ds_1;3
;;;;;;;;
Gordon;eth1;404;172.16.5.124;b8:ac:6f:8d:ac:b4;Vmnic0;00:50:56:5d:ac:b4;;
Gordon;eth2;35;192.168.140.114;b8:ac:6f:8d:ac:b6;Vmnic1;00:50:56:5d:ac:b6;;
Gordon;eth3;254;192.168.33.10;b8:ac:6f:8d:ac:b8;Vmnic2;00:50:56:5d:ac:b8;;

所以我用以下代码将它导入到一个数组中:

$Serveur = @()

Import-Csv C:\Users\aasif\Desktop\myfile.csv -Delimiter ";" |`
    ForEach-Object {
        $Serveur += $_.Serveur
    }

为了删除重复值,我这样做了:

$Serveur = $Serveur | sort -uniq

因此,当我显示我的数组时,我获得了这两个值:Dexter 和 Gordon 以及第三个空值

但我也得到一个空值

以下代码返回 3

$Serveur.count

为什么?

谢谢你的帮助

4

3 回答 3

8

如果你想排除空值,你可以这样做

$Serveur = $Serveur |  ? { $_ } | sort -uniq
于 2013-07-17T19:22:27.270 回答
3

如果有人(比如我)需要从数组中删除空元素,但不进行排序:

$Serveur = $Serveur | Where-Object { $_ } | Select -Unique
于 2015-05-17T11:08:31.550 回答
2

您有一个包含 3 个元素的数组,因此计数为 3。您从该行获得的元素;;;;;;;;不是$null,而是一个空字符串 ( ""),因此它被视为有效元素。如果要从数组中省略空元素,请按照CB的建议将它们过滤掉。

在更一般的说明中,我建议不要使用+=运算符。每个操作都将整个数组复制到一个新数组中,这势必会表现不佳。这里也完全没有必要。只需回显该字段的值并将输出作为一个整体分配回一个变量:

$csv = 'C:\Users\aasif\Desktop\myfile.csv'
$Serveur = Import-Csv $csv -Delim ';' | % { $_.Serveur } | ? { $_ } | sort -uniq
于 2013-07-17T21:45:04.987 回答