【发布时间】:2014-12-10 13:40:36
【问题描述】:
我有一个包含重复列标题的 CSV 文件,所以我不能使用 Import-Csv 来完成这项工作。标头名称是动态的。我需要获取第三列、第四列和之后的每第四列(例如:从 0 列开始 2、3、7、11、15...)。
我有重复的列名的原因是标题 3 需要与标题 0 相同的名称,以四个为一组。 0 > 3, 4 > 7, 8 > 11...
我使用 get-Content 是因为我不知道如何使用 Import-Csv 进行这项工作。我必须使用 Import-Csv 来获取列数,而使用 Get-Content 无法计算出来。
#Rename every fourth column
$file = "C:\Scripts\File.csv"
$data = get-content $file
$step = 4
$csv = Import-Csv "C:\Scripts\File.csv"
$headers = $data | select -first 1
$count = $csv[0].PSObject.Properties | select -Expand Name
for ($i = 0; $i -lt $count.count; $i += $step)
{
$headers = $headers -split ","
$headers[($i + 3)] = $headers[$i]
$headers[($i + 2)] = "timestamp"
$headers = $headers -join ","
$data[0] = $headers
$data | Set-Content "C:\Scripts\File.csv"
}
如果需要,我可以重用变量 $count(对于 $count.count),因此我不必再次使用 Import-Csv。我无法弄清楚如何根据数字而不是标题名称获取我需要的列。
这对于获取第三列非常有用(如果从 0 开始,则为第二列),但我不确定如何获取之后的每第四列(如果从 0 开始,则为第三列)
type "C:\Scripts\File.csv" | % { $_.Split(",") | select -skip 2 -first 1 }
截图如下。请记住,我不知道每第四列的标题名称,因为它们可能是任何东西,我只知道数据所在的列号(每第四列)。
【问题讨论】:
-
有什么原因你不能用
Import-Csv的-Header选项手动指定自己的列标题?
标签: powershell