使用Powershell将空白列插入csv

oyt4ldly  于 2023-02-04  发布在  Shell
关注(0)|答案(2)|浏览(168)

在我的脚本中,我正在构建一个自定义的Powershell对象,该对象将被发送到Export-Csv。接收方要求我包括一些空白列(没有数据和标题),我不知道如何做到这一点。
如果对象如下所示:

$obj = [PSCustomObject][ordered]@{
    EMPLOYER_EIN               = '123456'
    ACTION_CODE                = 1
    LAST_NAME                  = Smith
    FIRST_NAME                 = John
    MIDDLE_INITIAL             = $null
    EMPLOYEE_SSN               = '111-11-1111'
}

我怎样才能让生成的. csv文件的第一行看起来像这样:
雇主_EIN,操作_代码,,姓氏,名字,中间名缩写,,雇员_SSN
换句话说,在运行Export-Csv之后,我希望在Excel中打开该文件时该文件看起来如下所示:
| 雇主_EIN|操作代码||姓氏|名字|中间_初始||员工_SSN|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 小行星123456|1个||史密斯|约翰|||一一一-十一-一一一一|
请注意action_code/last_name和middle_initial/employee_ssn之间的额外列。我使用的是PS 5.1,但如果必要的话可以使用7。

rryofs0p

rryofs0p1#

作为测试,我创建了一个包含字段ABC的CSV test.csv,并输入了几行值:

"A","B","C"
1,2,3
4,5,6

然后执行命令序列

Import-CSV -path Test.csv | Select-Object -Prop A," ",B,C | Export-CSV -Path test2.csv

并查看结果test2.csv,其中包含

#TYPE Selected.System.Management.Automation.PSCustomObject
"A"," ","B","C"
"1",,"2","3"
"4",,"5","6"

我相信这将是最接近的,你会得到没有手动处理CSV作为一个文本文件。
这基本上就是圣地亚哥·斯夸松在评论中提出的建议。
如果需要多个“空白”列,则每个列都必须有一个带有不同非零空格数的标题。

flmtquvp

flmtquvp2#

我建议:

  • 使用共享名称前缀(如BLANK_)后跟序列号(属性名必须唯一)的空虚拟属性构造对象
  • 最初通过管道传输到ConvertTo-Csv,这允许使用-replace操作在第一个输出行(标题行)中用空字符串替换伪属性名。
  • 结果(已经是CSV格式)可以保存到Set-Content的CSV文件中。
$obj = [PSCustomObject] @{
  EMPLOYER_EIN               = '123456'
  ACTION_CODE                = 1
  BLANK_1                    = $null    # first dummy property
  LAST_NAME                  = 'Smith'
  FIRST_NAME                 = 'John'
  MIDDLE_INITIAL             = $null
  BLANK_2                    = $null    # second dummy property
  EMPLOYEE_SSN               = '111-11-1111'
}

$first = $true
$obj | 
  ConvertTo-Csv |
  ForEach-Object {
    if ($first) { # header row: replace dummy property names with empty string
      $first = $false
      $_ -replace '\bBLANK_\d+'
    }
    else { # data row: pass through
      $_
    }
  } # pipe to Set-Content as needed.

输出(注意ACTION CODEMIDDLE_INITIAL后面的空白列名):

"EMPLOYER_EIN","ACTION_CODE","","LAST_NAME","FIRST_NAME","MIDDLE_INITIAL","","EMPLOYEE_SSN"
"123456","1",,"Smith","John",,,"111-11-1111"

相关问题