回答編集履歴
3
期待通りの動作をしなかった (すみません) ので誤りを訂正します
test
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
**2024-02-26 訂正あり**
|
2
|
+
___
|
1
3
|
Import-CSVコマンドレットでCSVファイル全部を読み込んで処理しようとすると、メモリ不足になって失敗するということですね。
|
2
4
|
|
3
5
|
であれば、CSVファイルを少しずつ読み込んで処理できる方法を考えなければなりません。理想は一度に1レコード (1行) しか読み込まないことです。
|
@@ -21,11 +23,15 @@
|
|
21
23
|
“差之 寸世蔵”,”2001-03-11”,”9862200”,...
|
22
24
|
“耶 由代”,”2023-04-25”,”0850245”,...
|
23
25
|
```
|
24
|
-
``` ps
|
26
|
+
``` ps1
|
25
|
-
sort X
|
27
|
+
sort.exe XY-key.csv > XY.csv
|
26
28
|
```
|
27
29
|
|
30
|
+
なお、XY-key.csvは上のX-key.csv、Y-key.csv、…の内容を連結したものです。連結の順番は問いませんし、ファイルの数も自由です。
|
31
|
+
|
28
32
|
sortコマンドはメモリ不足にならないのか心配でしょうか。sortコマンドはすべてのレコードを一度にメモリ上でソートできない場合、データを小部分に分けてソートした結果を一時的にディスクに保存しその後マージすることで、メモリ不足を起こさずにすべてのレコードがソートされた結果を出力します (詳しくは[sortコマンドの文書](https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/sort)を参照)。
|
33
|
+
|
34
|
+
※拡張子なしのsortを実行するとsortコマンドの代わりにSort-Content コマンドレットが実行されてしまうので、sort.exeとして実行する必要があります。
|
29
35
|
|
30
36
|
さて、ソートの結果できるファイルはこんなふうになります (名前のソート結果が実際とはちがうかもしれませんが、例ということで)。
|
31
37
|
XY.csv
|
2
微修正
test
CHANGED
@@ -10,13 +10,13 @@
|
|
10
10
|
sortコマンドでは特定のフィールドでソートすることはできませんから工夫が必要ですね。たとえばキーフィールドをレコードの先頭に持ってくれば、キーでソートできます。
|
11
11
|
|
12
12
|
X-key.csv
|
13
|
-
```
|
13
|
+
```
|
14
14
|
“差之 寸世蔵”,”2001-03-11”,”9862200”,...
|
15
15
|
“阿以 宇江雄”,”1970-01-01”,”5010634”,...
|
16
16
|
“加幾 久計子”,”1989-11-09”,”0850245”,...
|
17
17
|
```
|
18
18
|
Y-key.csv
|
19
|
-
```
|
19
|
+
```
|
20
20
|
“ラリー ルレロ”,”2011-09-01”,”5010634”,...
|
21
21
|
“差之 寸世蔵”,”2001-03-11”,”9862200”,...
|
22
22
|
“耶 由代”,”2023-04-25”,”0850245”,...
|
@@ -25,11 +25,11 @@
|
|
25
25
|
sort X-key.csv Y-key.csv > XY.csv
|
26
26
|
```
|
27
27
|
|
28
|
-
sortコマンドはメモリ不足にならないのか心配でしょうか。sortコマンドはすべてのレコードを一度にメモリ上でソートできない場合、データを小部分に分けてソートした結果を一時的にディスクに保存し
|
28
|
+
sortコマンドはメモリ不足にならないのか心配でしょうか。sortコマンドはすべてのレコードを一度にメモリ上でソートできない場合、データを小部分に分けてソートした結果を一時的にディスクに保存しその後マージすることで、メモリ不足を起こさずにすべてのレコードがソートされた結果を出力します (詳しくは[sortコマンドの文書](https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/sort)を参照)。
|
29
29
|
|
30
30
|
さて、ソートの結果できるファイルはこんなふうになります (名前のソート結果が実際とはちがうかもしれませんが、例ということで)。
|
31
31
|
XY.csv
|
32
|
-
```
|
32
|
+
```
|
33
33
|
“ラリー ルレロ”,”2011-09-01”,”5010634”,...
|
34
34
|
“阿以 宇江雄”,”1970-01-01”,”5010634”,...
|
35
35
|
“加幾 久計子”,”1989-11-09”,”0850245”,...
|
@@ -41,6 +41,7 @@
|
|
41
41
|
|
42
42
|
実際のコードは考えてみてください。
|
43
43
|
|
44
|
+
___
|
44
45
|
なお、上記の方式ではメモリの使用量は抑えられますが、処理中に一時的に使用されるディスクの空き容量を考慮しなければなりません。
|
45
46
|
* キーフィールドがレコードの最初にくるCSVファイル。元のCSVファイルと同じ大きさです。
|
46
47
|
* sortコマンドが作成する一時ファイル。ソート対象のCSVファイルの総量と同じくらいで、多くても2倍を超えることはないでしょう。
|
1
追記: ディスク使用量について
test
CHANGED
@@ -41,3 +41,9 @@
|
|
41
41
|
|
42
42
|
実際のコードは考えてみてください。
|
43
43
|
|
44
|
+
なお、上記の方式ではメモリの使用量は抑えられますが、処理中に一時的に使用されるディスクの空き容量を考慮しなければなりません。
|
45
|
+
* キーフィールドがレコードの最初にくるCSVファイル。元のCSVファイルと同じ大きさです。
|
46
|
+
* sortコマンドが作成する一時ファイル。ソート対象のCSVファイルの総量と同じくらいで、多くても2倍を超えることはないでしょう。
|
47
|
+
* ソート結果のファイル。元のCSVファイルの総量と同じ大きさです。
|
48
|
+
|
49
|
+
これらのファイルは最終的な出力が得られれば必要なくなるため削除できますが、作業のためには元のCSVファイルの総量の3倍から4倍の空きディスク容量が必要だということになります。
|