使用Powershell按列拆分csv文件

5

我是一个PowerShell的新手,但它似乎是完成这项任务的最佳工具。 有一个像这样的CSV文件:

Date,mary1,mary2,maryr3,mary4
9/01/2011 1:00,1.39,3.43,3.29,1.83
9/01/2011 3:00,0,0,0,0
9/01/2011 4:00,0,0,0,0
9/01/2011 5:00,0,0,0,0
9/01/2011 6:00,1.91,0.07,0.09,0.09
9/01/2011 7:00,5.57,2.01,2.11,3.4
9/01/2011 8:00,0.53,0.41,0.35,2.01
9/01/2011 9:00,4.72,0.15,0.21,3.15
9/01/2011 10:00,0.21,0,0.49,0.72
9/01/2011 11:00,2.44,0.77,2.06,1.7
9/01/2011 12:00,0,4.91,5.21,1.98

这是逗号分隔的。我正在尝试根据标题列将其拆分为包含一列的多个文本文件。

实际上,我会有多个列,因此我希望有一个更通用的代码来处理更多的行和列。

您对此有什么想法吗?我能够使用split函数并获得单独的列,但我的powershell知识还不足以进行多个提取。

任何帮助都将不胜感激。

3个回答

3

尝试:

$a = Import-Csv .\myfile.csv
$b = $a[0] | Get-Member | ? { $_.membertype -eq 'noteproperty'} | select name
$b | % { $a | ft -Property $_.name | out-file "$($_.name).txt"  }

1
 ###import csv file with value

$ps1 = Import-Csv .\testps.csv
  foreach($p in $ps1){

## value which will be seprated

$t = $p.test 
#####split delimiter is space you can select your own like , / etc.
$t1 =  $t.Split(" ")
 ##########first value
  $test1 = $t1[0]
######second value
  $test2 = $t1[1]
   #####Adding value in csv file test1 and test2
   echo $p | Select-Object *,@{n='test1';e={"$test1"}},@{n='test2';e=    {"$test2"}}|Export-Csv -Append  testdone.csv 

}

0
查找 Import-CSV 或逐行处理文件。要逐行读取文件,使用 .Net Framework。将每一行按逗号进行分割,并根据数组索引将所需的列添加到输出文件中。对于逐行处理的注意事项:如果源数据中有逗号,这样做会出现严重错误。就像这样,
# Open the source file
$file = [IO.File]::OpenText("somefile.csv")
# Read each line
while($line = $file.ReadLine()) {
    # Split line data on comma
    $l= $line.Split(',')
    # Add columns 0 and 2 other file 1
    add-content "otherfile1.csv" $("{0},{1}" -f $l[0], $l[2])
    # Add columns 1, 3  and 5 other file 2
    add-content "otherfile2.csv" $("{0},{1},{2}" -f $l[1], $l[3], $l[5])
}

非常感谢,我现在会尝试并回复您。 - Mary
非常感谢,这个方法很好地将文件分成了两个部分,但是您有没有想过如何循环提取每一列并生成5个(或n个)文件的总和呢? - Mary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接