Skip to content

Instantly share code, notes, and snippets.

@hiroyuki-sato
Last active July 1, 2019 12:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hiroyuki-sato/c084b9d9a601c1eda62d2f6f9f170276 to your computer and use it in GitHub Desktop.
Save hiroyuki-sato/c084b9d9a601c1eda62d2f6f9f170276 to your computer and use it in GitHub Desktop.
CSVファイル分割

PowerShell ISE

PowerShell ISEを使って次のコマンドを実行してみましょう。

echo "Hello, World"

第2版: ほげボディなし版

$split_size = 3          # 分割数
$filenum    = 1          # ファイル名連番
$cur_line   = 1          # 現在の分割数
$input_file = "hoge.csv" # 入力ファイル名

# ヘッダを取得
$header = Get-Content $input_file | select -First 1

# ヘッダ以外を_hoge_body.csv に保存
Get-Content $input_file | select-object -skip 1 | `
    %{ 
       # 現在の処理行数が1行目の時だけヘッダを出力
       # ファイルを上書きする
       if ( $cur_line % $split_size -eq 1 ){
           Set-Content -Path test$filenum.txt -Value $header -Encoding default
       }

       # 各行を所定のファイルに出力する
       Add-Content -Path test$filenum.txt -Value $_ -Encoding default

       # 分割したい行数に達したら余りが0になったら
       # ファイル名に使う番号を1増やす
       # 処理行数を1にリセット
       if ( $cur_line % $split_size -eq 0 ){
           $filenum++
           $cur_line = 1
       } else {
           $cur_line ++ # 処理行数を増やす
       }
     }

第1版

# コマンド実行前にtestX.txtを削除すること

$i = 0

# ヘッダを取得
$header = Get-Content hoge.csv | select -First 1

# ヘッダ以外を_hoge_body.csv に保存
Get-Content hoge.csv | select-object -skip 1 | `
    %{ Add-Content -Path _hoge_body.csv -Value $_ -Encoding default }

# _hoge_body.csv を3行ずつ読み込みヘッダとボディをくっつけてtestX.txtに保存 Xには番号がはいる
# `をとって一行にかいてもよい
Get-Content -Path _hoge_body.csv -ReadCount 3 | `
    %{ Add-Content -Path test$i.txt -Value $header -Encoding default ; `
       Add-Content -Path test$i.txt -Value $_ -Encoding default ; `
       $i++ }

# _hoge_body.csv を削除
Remove-Item _hoge_body.csv

メモ

if ($Args.length -lt 1) {
  Write-Host "Hogehoge"
  exit(1)
}

$input = $Args[0]

if (!(Test-Path $input)) {
  Write-Host "Fugafuga"
  exit(1)
}


Write-Host $Args.length
Write-Host $input
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment