我有一个名为 test.csv ($testCSV) 的 CSV 文件。此文件中有许多列,但我只想选择前 10 列并将这 10 列放入另一个 CSV 文件中。请注意,我没有任何列标题,因此无法根据列名选择列。
以下代码行将获取文件的前 10 行:
$first10Rows = Get-Content $testCSV | select -First 10
Run Code Online (Sandbox Code Playgroud)
但是,我需要前 10 个 COLUMNS 的所有数据,并且我正在努力寻找解决方案。
我还查看了拆分文件并尝试按如下方式返回第一列:
$split = ( Get-Content $testCSV) -split ','
$FirstColumn = $split[0]
Run Code Online (Sandbox Code Playgroud)
我曾希望 $split[0] 会返回整个第一列,但它只返回文件中的第一个字段。
非常感谢解决此问题的任何帮助。
提前致谢。
******更新******
我正在使用 vonPryz 在下面回答的方法来解决这个问题,即:
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b
Run Code Online (Sandbox Code Playgroud)
但是,我现在还尝试通过添加以下额外代码来仅在 b 列不为空的情况下导入 CSV 文件:
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b | where b -notmatch $null
Run Code Online (Sandbox Code Playgroud)
我需要这样做来加速脚本,因为有数万行 b 列为空,我不需要导入这些行。但是,上面的代码没有返回任何数据,这意味着代码一定是错误的,或者它认为字段 b 不为空。文本文件的 2 行示例是:
1,2,3
x,,z
我只想要第二列被占用的行。
我希望我已经一次又一次地解释清楚,任何帮助表示赞赏。
*******************回答********************
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b | Where-Object { $_.b -ne '' }
谢谢!
缺少列标题没有问题。cmdletImport-CSV
可以使用-Header
switch指定标头。假设测试数据保存为 C:\temp\headerless.csv 并包含
val11,val12,val13,val14
val21,val22,val23,val24
val31,val32,val33,val34
Run Code Online (Sandbox Code Playgroud)
将其导入为 CSV 是微不足道的:
Import-Csv -Delimiter "," -Header @("a","b","c","d") -Path C:\temp\headerless.csv
#Output
a b c d
- - - -
val11 val12 val13 val14
val21 val22 val23 val24
val31 val32 val33 val34
Run Code Online (Sandbox Code Playgroud)
只选择列a
和b
并不难之一:
Import-Csv -Delimiter "," -Header @("a","b","c","d") -Path C:\temp\headerless.csv | select a,b | ft -auto
#Output
a b
- -
val11 val12
val21 val22
val31 val32
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15044 次 |
最近记录: |