我正在处理我最近创建的CSV文件。 CSV文件包含带标题和相应行的列。
我需要删除其标题中具有特定文本的整个列(包括其数据)。例如,列1具有名为intID
的标题,第2列具有名为boolID
的标题,第3列具有名为charID
的标题,依此类推(' ID'是常见文本)。有些专栏没有ID' ID'作为标题中的文字,我们需要保留它们。
csv文件是动态生成的,因此根据我们为csv选择的数据,可能会有更多/更少的列。但我们需要这些列,其标题中包含一些常用文本。
我们如何实现这一目标?
答案 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)
假设如下:
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 }