当前位置: 首页 > 知识库问答 >
问题:

使用PowerShell从CSV删除列

侯涵煦
2023-03-14

我有一个CSV文件,它有重复的列标题,所以我不能使用导入CSV来完成这项工作。标题名称是动态的。我需要得到第三列、第四列以及之后的每四列(例如:从0列开始,第2列、第3列、第7列、第11列、第15列…)。

我有重复列名的原因是头3需要与头0相同的名称,以四个组为一组。0个

我使用“获取内容”,因为我不知道如何使用“导入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),因此我不必再次使用导入Csv。我不知道如何根据数字而不是标题名来获取所需的列。

这对于获得第三列(如果从0开始,则为第二列)非常有效,但我不确定如何获得第四列(如果从0开始,则为第三列)

type "C:\Scripts\File.csv" | % { $_.Split(",") | select -skip 2 -first 1 }

下面是截图。请记住,我不知道每四列的标题名称,因为它们可能是任何内容,我只知道数据所在的列号(每四列)。

共有1个答案

彭宏深
2023-03-14

我会重新思考整个过程,并从以下几点开始:

$file = "C:\Scripts\File.csv"
$HeaderCount = ((gc sentlog.csv -TotalCount 1).split(',')).count -1
$CSV = import-csv $file -Header (0..$HeaderCount)

现在,您可以将这些列标题视为数组索引来提取所需的列。

使用选择-跳过1删除原始标题行。您可以使用计算的属性重写导出的属性名称,或者使用从原始标题行提取的属性名称创建新对象。

好的,根据发布的数据,尝试以下操作:

$file = "C:\Scripts\File.csv"
$OutputFile = "C:\Scripts\OutputFile.csv"

$HeaderCount = ((Get-Content $file -TotalCount 1).split(',')).count -1
$CSV = import-csv $file -Header (0..$HeaderCount)

$SelectedColumns = @(2) + ( (0..$HeaderCount) |? { ($_ % 4) -eq 3 } ) -as [string[]]

 $CSV | 
 select $SelectedColumns |
 ConvertTo-CSV -NoTypeInformation |
 Select -Skip 1 |
 Set-Content $OutputFile
 类似资料:
  • 用于从CSV中删除空白列的Powershell脚本 我有一个电子表格,我正在将其导入MySQL数据库,由于电子表格中的空白列,导入失败。 是否有一个PowerShell脚本,我可以运行/创建,将检查任何给定的CSV文件并删除空白列? Col1,Col2,Col3,Col4,,,Val1,Val2,Val3,Val4

  • 本文向大家介绍如何使用PowerShell从AD域中删除计算机?,包括了如何使用PowerShell从AD域中删除计算机?的使用技巧和注意事项,需要的朋友参考一下 要从域中删除计算机,我们需要使用Remove-Computer命令。 在上面的示例中,计算机名称Test1-Win2k16将使用域凭据从域中删除,并将其加入到名为WG的工作组中。如果系统由于任何原因无法重启,则需要手动重启系统。 这里的

  • 问题内容: 我有一个很大的csv文件,其中某些行完全空白。如何使用Python从csv中删除所有空白行? 经过您的所有建议,这就是我到目前为止的内容 可以吗?或者有更好的方法吗? 问题答案: 使用模块: 如果还需要删除所有字段为空的行,请将行更改为: 而且,如果您还想将仅包含空格的字段视为空白,则可以将其替换为: 请注意,在Python 2.x和更早版本中,该模块需要二进制文件,因此您需要使用e标

  • 问题内容: 我有一个可以下载,编辑然后再次上传CSV文件的过程。在下载时,CSV文件的格式正确,没有换行双引号 当我在电子表格中打开CSV并进行编辑和保存时,它会在字符串周围添加双引号 我认为这只是电子表格的作用(在本例中为openoffice)。我希望我的上传脚本删除环绕双引号。我不能删除所有引号,以防万一正文包含它们,并且我也不想仅检查第一个和最后一个字符是否包含双引号。 我几乎确定pytho

  • 问题内容: 有什么方法可以使用Logstash和csv文件从ElasticSearch删除文档?我阅读了Logstash文档,却一无所获,并尝试了一些配置,但是使用操作“删除”却没有任何反应 有人尝试过吗?我应该在配置的输入和过滤器部分添加一些特殊的东西吗?我使用文件插件作为输入,使用csv插件作为过滤器。 问题答案: 绝对可以按照您的建议去做,但是如果您使用的是Logstash 1.5,则需要使

  • 我有一个名为key_resp_5_rt的列,其中我想删除300ms以下的所有行(这是一个反应时间列) 有人能告诉我下面的代码是否可以删除rt小于0.3秒的行吗? 当我事后检查时,值低于0.3的行仍然存在,我不知道为什么