2014-12-05 60 views
0

我需要刪除CSV中的前兩列。我不知道標題名稱,它們不是靜態的。我想出瞭如何刪除前兩行,但不是前兩列。我有工作的示例代碼如下使用PowerShell刪除CSV中的前兩列

$csv  = Import-Csv 'input.csv' 
$headers = $csv[0].PSObject.Properties | select -Expand Name 
$step = 4 

for ($i = 0; $i -lt $headers.Count; $i += $step) { 
    $csv | select $headers[$i..($i+$step-1)] | 
    Export-Csv "output_$($i/$step).csv" -NoType 
} 
+0

我正要向您推薦自己的問題。 http://stackoverflow.com/questions/27320245/manipulating-csv-data-with-powershell。答案几乎就在那裏。 – Matt 2014-12-05 19:59:23

+0

在您的代碼中,您已經決定哪些列以CSV文件結尾。所有你需要做的就是管理'$頭[$ i ..($ i + $ step-1)]' – 2014-12-05 20:02:09

+0

如果你只是想刪除前2列,然後分成4組,這裏的答案。如果您希望從第一個CSV中刪除列(僅留下該CSV中的2列),請參閱我對您的評論[此處]的回覆(http://stackoverflow.com/a/27321887/1630171)。 – 2014-12-05 22:17:59

回答

1

後剩下這似乎工作:

$csv  = Import-Csv 'input.csv' 
$include = $csv[0].psobject.properties | select -ExpandProperty Name -Skip 2 
$csv | select $include -skip 2 | export-csv output.csv -NoTypeInformation 

這應該照顧修剪掉第2列,然後跳過第2排。

4

如果你想跳過你只需要通過不調整$headers聲明

$headers = $csv[0].PSObject.Properties | select -Skip 2 -Expand Name 

以上將跳過第2列第X列處理前2個標題。 4代碼將組列的那些2.

2

我覺得只是改變了0的for循環到2應該這樣做:

$csv  = Import-Csv 'input.csv' 
$headers = $csv[0].PSObject.Properties | select -Expand Name 
$step = 4 

for ($i = 2; $i -lt $headers.Count; $i += $step) { 
    $csv | select $headers[$i..($i+$step-1)] | 
    Export-Csv "new_output_$($i/$step).csv" -NoType 
} 
+0

@AnsgarWiechers,感謝編輯!當我嘗試格式化答案時,我顯然已經失去了自己的想法。 – 2014-12-05 22:24:03