从CSV文件中拆分名称

时间:2016-03-02 13:32:48

标签: csv powershell-v3.0

我正在编写一个脚本来创建共享邮箱和安全组,然后将用户添加到安全组,但是用户名被格式化为“firstname lastname”(john doe)并且脚本找不到用户只有当我把名字改为“doe,john”时才有效。

我确实找到了一些文章可以从“last,first”切换到“first,last”,但是当我尝试更改它时不起作用。

这是我到目前为止所做的,而且它不起作用:

Import-Csv "c:\import.csv" | foreach { 
    $_.user = "{1) {0}" -f ($_.user -split '(0), (1)' )
    $_ 
} | Export-Csv "c:\export.csv"

2 个答案:

答案 0 :(得分:0)

您需要在空格处分割(或逗号后跟空格,具体取决于您的实际数据)。不要在拆分表达式中包含值的分组子匹配。在使用-replace运算符时,您只包含分组的子匹配,这是我更喜欢的:

Import-Csv 'c:\import.csv' | ForEach-Object { 
    $_.user = $_.user -replace '^(.*) (.*)$', '$2, $1'
    $_ 
} | Export-Csv 'c:\export.csv' -NoType

作为ForEach-Object的替代方案,您可以将Select-Objectcalculated property一起使用:

Import-Csv 'c:\import.csv' |
    Select-Object -Property *,@{n='user';e={$_.user -replace '^(.*) (.*)$', '$2, $1'}} -Exclude user |
    Export-Csv 'c:\export.csv' -NoType

答案 1 :(得分:0)

感谢Ansgar但我的CVS文件不包含逗号,所以我在下面调整了您的代码和最终版本,再次感谢

lpolygon <- function (x, y = NULL, border = NULL, col = NULL, ...) { 
   require(grid, TRUE) 
   xy <- xy.coords(x, y) 
   x <- xy$x 
   y <- xy$y 
   gp <- list(...) 
   if (!is.null(border)) gp$col <- border 
   if (!is.null(col)) gp$fill <- col 
   gp <- do.call("gpar", gp) 
   grid.polygon(x, y, gp = gp, default.units = "native") 
} 

find.zero <- function(x, y) { 
   n <- length(y) 
   yy <- c(0, y) 
   wy <- which(yy[-1] * yy[-n - 1] < 0) 
   if(!length(wy)) return(NULL) 
   xout <- sapply(wy, function(i) { 
     n <- length(x) 
     ii <- c(i - 1, i) 
     approx(y[ii], x[ii], 0)$y 
   }) 
   xout 
} 

trellis.par.set(theme = col.whitebg()) 
png();
xyplot(vals, panel = function(x,y, ...) { 
        x.zero <- find.zero(x, y) 
        y.zero <- y > 0 
        yy <- c(y[y.zero], rep(0, length(x.zero))) 
        xx <- c(x[y.zero], x.zero) 
        ord <- order(xx) 
        xx <- xx[ord] 
        xx <- c(xx[1], xx, xx[length(xx)]) 
        yy <- c(0, yy[ord], 0) 
        lpolygon(xx, yy, col="transparent", border = "green") 
        yy <- c(y[!y.zero], rep(0, length(x.zero))) 
        xx <- c(x[!y.zero], x.zero) 
        ord <- order(xx) 
        xx <- xx[ord] 
        xx <- c(xx[1], xx, xx[length(xx)]) 
        yy <- c(0, yy[ord], 0) 
        lpolygon(xx, yy, col = "transparent", border = "red") 
        panel.abline(h = 0) ;panel.grid(v=-1, h=-1 )
     }); dev.off()