如何根据标题名称中的常见文本检测和删除CSV列?

时间:2016-08-30 12:42:50

标签: powershell csv

我正在处理我最近创建的CSV文件。 CSV文件包含带标题和相应行的列。

我需要删除其标题中具有特定文本的整个列(包括其数据)。例如,列1具有名为intID的标题,第2列具有名为boolID的标题,第3列具有名为charID的标题,依此类推(' ID'是常见文本)。有些专栏没有ID' ID'作为标题中的文字,我们需要保留它们。

csv文件是动态生成的,因此根据我们为csv选择的数据,可能会有更多/更少的列。但我们需要这些列,其标题中包含一些常用文本。

我们如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

这样的事情能做到吗?

$yourfile = "<path to your csv>"
# Import the CSV
$csv = Import-Csv -Path $yourfile
# Find all columns that do not end with "ID"
$colsToKeep = $csv | Get-Member -MemberType NoteProperty |?{$_.name -notmatch "^.+ID$"} | Select-Object -ExpandProperty name
# Filter out all unwanted columns
$newCsv = $csv | Select-Object -Property $colsToKeep
# Export CSV to new file
$newCsv | Export-Csv -Path "<path to new csv>"

答案 1 :(得分:0)

假设如下:

  • ID部分不是纯文本“ID”,而是动态任意文本
  • 感兴趣的标题以intcharbool
  • 开头

让我们计算ID部分的出现次数并构建一次使用的标题列表,然后导出CSV。

$csv = Import-Csv 1.csv

$prefix = '^(int|char|bool)' # or '^([a-z])' for any lowercase text
$headers = $csv[0].PSObject.Properties.Name
$uniqueIDs = $headers -creplace $prefix, '' | group | ? Count -eq 1 | select -expand Name
$uniqueHeaders = $headers | ?{ $_ -creplace $prefix, '' -in $uniqueIDs }

$csv | select $uniqueHeaders | Export-Csv 2.csv -NoTypeInformation

注意:在旧的PowerShell 2.0而不是? Count -eq 1中使用?{ $_.Count -eq 1 }