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

File 使用powershell删除csv中的空格和列,file,csv,powershell,space,File,Csv,Powershell,Space,我正在尝试使用powershell将下载的“.txt”文件转换为好看且有用的“.csv”文件。我很乐意完成这项任务,但在目标实现前不久,我遇到了一些无法解决的问题 它是一个包含mac地址OUI部分及其名称的列表。 这就是它的样子(没有报价): 我现在的第一个问题是,如何才能去掉OUI地址列中的空格。第二个问题,如何删除空列 最后应该是这样的(没有报价): 因此,我们在第一列中有OUI,没有空格,在第二列中有公司名称。但在这里,在名称中使用空格很重要 原始文件内容: 00-00-09

我正在尝试使用powershell将下载的“.txt”文件转换为好看且有用的“.csv”文件。我很乐意完成这项任务,但在目标实现前不久,我遇到了一些无法解决的问题

它是一个包含mac地址OUI部分及其名称的列表。 这就是它的样子(没有报价):

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

最后应该是这样的(没有报价):

因此,我们在第一列中有OUI,没有空格,在第二列中有公司名称。但在这里,在名称中使用空格很重要

原始文件内容:

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

希望您能帮助我。

这里有一种方法,使用带有正则表达式的
Get Content
Select 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
}
对于包含双引号字符串的输出,请将
新对象
替换为格式化字符串;例如:

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
}

您可以使用正则表达式测试仪(例如)查看正则表达式(即
选择字符串的参数)如何提取子字符串。

请使用原始文本文件的文本内容更新您的问题。(它不包含字符串“EMPTY COLUMN”,是吗?)没错,它不包含“EMPTY COLUMN”。我会更新这个问题。谢谢你也提到了MAC地址,但是MAC地址有六对数字,而不是三对。是的,对,对不起,这只是前24位,所以它是识别组织的部分(OUI(组织唯一标识符)),这些表达式测试人员很酷。我可以检查代码的每个表达式的作用。我对powershell非常陌生,现在如何在文件中逐行编写OUI和描述?在示例代码最后一行的结束字符后添加
| export csv“test.csv”-notypeinformation
。这将把对象输出到一个CSV文件中。这是可行的,但现在它看起来是这样的:
00-00-09,“XEROX CORPORATION”
00-00-0A,“OMRON TATEISI ELECTRONICS CO.”
00-00-0B,“MATRIX CORPORATION”
但它不是选项卡分隔的,有引号更好,但当我使用
“{0}”“{1}”-f$oui时,$description
然后使用
|export csv“test.csv”-notypeinformation将其写入csv文件中
该文件将看起来非常奇怪
长度30
对不起,我的powershell技能不好,非常感谢您的帮助如果要使用格式化字符串,请不要使用
export csv
。改用
| out文件“newfile.txt”
。如果您希望在列之间有一个制表符,格式化的字符串将是
'{0}'`t{1}'-f$oui,description
(即,将空格替换为
`t
)。
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
}
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
}