【问题标题】:PowerShell: slice and dice tab delimited filePowerShell:切片和骰子制表符分隔文件
【发布时间】:2019-01-18 17:47:12
【问题描述】:

我的备份软件生成了一个制表符分隔的文本文件。我希望能够使用 Import-CSV 将其作为 PowerShell 数组导入。

问题是导出文件的前 5 行阻止 PowerShell 将其识别为数组:

#List of Media
#Cell Manager: hpdp.domain.local
#Creation Date: 11/08/2018 9:36:09 AM
# Headers
# Medium ID Label   Location    Status  Protection  Used [MB]   Total [MB]  Last Used   Last Used_t Pool    Type

我能够“解决”这个问题的方法是使用记事本删除前四行并从标题行中删除第一个 #。然后文件如下所示:

Medium ID   Label   Location    Status  Protection  Used [MB]   Total [MB]  Last Used   Last Used_t Pool    Type
id1:id2:id3:id5 [hostname] labelname_31 [Library:     5]    Good    13/08/2018 10:01:41 PM  762699.50   762699.50   14/07/2018 10:00:36 PM  1531828836  Tape Drive Pool LTO-Ultrium

我正在尝试找到一种方法让 PowerShell 进行此更改。例如,我尝试使用以下行作为第一步删除前四行:

(Get-Content $file | Select-Object -Skip 4) | Set-Content $file

该文件似乎随后失去了制表符,因此不再分隔。

如何在不丢失标签的情况下删除行和第一个 #?提前致谢!

【问题讨论】:

  • 如果您的数据中没有#,那么您可以使用(Get-Content $file | Select-Object -Skip 4) -replace ("#", "") | Set-Content $file
  • 谢谢,我试过了,但它仍然会丢失标签。事实上,只要执行“(Get-Content $file) | Set-Content $file”就会丢失选项卡。

标签: powershell text tabs import-csv


【解决方案1】:

这可以通过这样的方式来完成

$data = Get-Content $file | Select-Object -Skip 4 
$data[0] = $data[0] -replace '^#\s*', ''

现在您可以根据需要覆盖文件:

$data | Set-Content $file -Force

或者直接在Powershell中作为对象使用(一个csv对象就是一个PSObjects数组)

$csv = ($data -join [environment]::NewLine) | ConvertFrom-Csv -Delimiter "`t"

或者使用这个转换后的对象再次写出文件

$csv | Export-Csv -Path $file -Delimiter "`t" -NoTypeInformation -Force

【讨论】:

  • 谢谢。我尝试了你的建议,但它们都产生了一个没有标签的格式错误的文件
  • 嗯......他们都在我的机器上工作。你确定输入文件是制表符分隔的,而不是更像一个固定宽度的文件吗?您只向我们展示了一行数据,所以我无法分辨。
  • 如何检查输出文件的选项卡?记事本或更高级的阅读器,如 EditPlus,您可以让它显示这些“隐藏”字符。尝试使用 Data -> From Text File -> Delimited -> Tab 在 Excel 中读取它
  • 当我在 Notepad++ 中打开它并搜索 \t (Extended) 时,它会突出显示“单元格”之间的所有空格。所以这证明文件是制表符分隔的。同样,如果我在记事本中手动编辑此文件以删除不需要的字符并保存选项卡,则会保留。我只是想弄清楚如何在 PowerShell 中执行此操作。谢谢。
  • 标题也是如此吗? ($data -join [environment]::NewLine) | ConvertFrom-Csv -Delimiter "t"` 显示什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2013-11-20
相关资源
最近更新 更多