使用Powershell按列拆分csv文件

时间:2012-11-29 05:34:02

标签: powershell text

我是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 个答案:

答案 0 :(得分: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 :(得分: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 

}

答案 2 :(得分: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])
}