我正在处理我最近创建的CSV文件。CSV文件包含具有标题的列和相应的行。
我需要删除标题中包含特定文本的整个列(包括其数据)。例如,列1具有名为intID
的标头,列2具有名为boolID
的标头,列3具有名为charID
的标头,依此类推('ID‘是常见文本)。有一些列的标题中没有'ID‘作为文本,所以我们需要保留它们。
csv文件是动态生成的,因此根据我们为csv选择的数据,可能会有更多/更少的列。但我们需要这些列的标题包含一些要删除的常见文本。
我们如何才能做到这一点?
发布于 2016-08-30 21:21:35
像这样的东西能奏效吗?
$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>"
发布于 2016-08-30 21:44:25
假设以下情况:
int
、char
、bool
开头的动态任意文本
让我们计算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 }
https://stackoverflow.com/questions/39227860
复制相似问题