使用powershell删除csv中的空格和列

时间:2015-03-10 14:50:30

标签: file csv powershell space

我试图转换下载的" .txt"归档为好看且有用的#34; .csv"使用powershell的文件。我完成了这项任务,但在目标出现前不久,我遇到了一些我无法解决的问题。

这是一个包含OUI-part mac-addresses及其名称的列表。 这是它的样子(没有引用):

" 00-00-00   "  EMPTY COLUMN    "XEROX CORPORATION"
" 00-00-01   "  EMPTY COLUMN    "XEROX CORPORATION"

我现在的第一个问题是,如何获取OUI地址列中的空格。第二个,如何删除空列。

最后它应该看起来像这样(没有引用):

"00-00-00" "XEROX CORPORATION"
"00-00-01" "XEROX CORPORATION"

这样我们在第一列中没有任何空格的OUI,在第二列中有公司的名称。但是这里名称中有空格很重要。

原始文件内容:

  00-00-09          XEROX CORPORATION
  00-00-0A          OMRON TATEISI ELECTRONICS CO.
  00-00-0B          MATRIX CORPORATION
  00-00-0C          CISCO SYSTEMS, INC.

我希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

以下是一种方法,使用带有正则表达式的Get-ContentSelect-String来提取子字符串:

get-content "test.txt" | foreach-object {
  $_ | select-string '\s*((?:[0-9a-f]{2}-){2}[0-9a-f]{2})\s+(.+)$' | foreach-object {
    $oui = $_.Matches[0].Groups[1].Value
    $description = $_.Matches[0].Groups[2].Value
  }
  new-object PSObject -property @{
    "OUI" = $oui
    "Description" = $description
  } | select-object OUI,Description
}

对于包含引用字符串对的输出,请将New-Object替换为格式化字符串;例如:

get-content "test.txt" | foreach-object {
  $_ | select-string '\s*((?:[0-9a-f]{2}-){2}[0-9a-f]{2})\s+(.+)$' | foreach-object {
    $oui = $_.Matches[0].Groups[1].Value
    $description = $_.Matches[0].Groups[2].Value
  }
  '"{0}" "{1}"' -f $oui,$description
}

您可以使用正则表达式测试器(例如https://www.regex101.com/)来查看正则表达式(即Select-String的参数)如何提取子字符串。