4

我是 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

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

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

对此有什么想法吗?我可以使用拆分功能并取出各个列,但是我对 powershell 的了解还不允许我进行多次提取。

任何帮助将不胜感激。

4

3 回答 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"  }
于 2012-11-29T06:42:13.867 回答
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 

}
于 2017-02-20T07:25:58.483 回答
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])
}
于 2012-11-29T06:18:47.573 回答