修改数组中的列

时间:2018-12-18 16:18:24

标签: powershell csv formatting psobject

我正在读取一个包含25,000条记录的CSV文件,并且正在将每一列读取到for(i in 1:length(brands)){ plot1a_df <- plot1a_df %>% mutate(known_brands[i] = ifelse(brands[i] >1, 1, 0)) } 中。这是我到目前为止的内容:

psobject

运行此命令后,我得到了想要的正确结果,因为$file = Import-CSV .\server.csv $tempobj = New-Object psobject -Property @{ 'Name' = $file.Name 'Group' = $file.Group } 包含所有服务器名称,而$file.Name包含服务器组。但是,我的问题是我需要编辑每个服务器的名称而不干扰$file.Group。这是一个服务器名称原样的示例。

WindowsAuthServer @{wdk9870WIN}

我需要从每个服务器名称中删除.GroupWindowsAuthServer @{,仅保留服务器名称,在本示例中为WIN}

我尝试使用wdk9870函数(-replace),但是它要求我将结果保存到一个新数组中,然后将其弄乱或完全删除$tempobj.Name -replace "WindowsAuthServer @{",""

是否有其他方法可以做到这一点?我迷路了。

1 个答案:

答案 0 :(得分:1)

假设您的server.csv如下所示:

"Name","Group"
"WindowsAuthServer @{wdk9870WIN}","Group1"
"WindowsAuthServer @{wdk9880WIN}","Group2"
"WindowsAuthServer @{wdk9890WIN}","Group1"
"WindowsAuthServer @{wdk9900WIN}","Group1"

您只想更改Name列中的值,则可能会执行以下操作:

Import-Csv .\server.csv | ForEach-Object {
    New-Object psobject -Property @{
        'Name' = ([regex]'@\{(\w+)WIN\}').Match($_.Name).Groups[1].Value
        'Group' = $_.Group
    }
}

这将输出:

Name    Group 
----    ----- 
wdk9870 Group1
wdk9880 Group2
wdk9890 Group1
wdk9900 Group1

如果需要,您可以简单地将此信息通过管道传递到Export-Csv cmdlet,以另存为新的CSV文件。为此,只需在代码后附加| Export-Csv -Path .\server_updated.csv -NoTypeInformation

希望有帮助