1

最後の「フィールド」に従ってcsvファイルを分割したい。たとえば、csv ファイルには以下が含まれます。

a,1
b,2
c,3
d,1

数字はカテゴリを示します。

このファイルは、3 つのファイルが存在するように、番号 (それぞれのカテゴリ) に従って個別のファイルに分割する必要があります。

最初のファイル:

a,1
d,1

2 番目のファイル:

b,2

3 番目のファイル:

c,3

貪欲な方法は、csv を行ごとに読み取り、文字列を「,」で分割し、最後の要素 (ここでは数値) を分離することです。その後、現在の行の番号を確認し、それを FileWriter に入れることができました。ただし、システムを拡張可能にしたいので、カテゴリがいくつになるかはわかりません。したがって、必要な FileWriter の数は不明です。

別の方法として、各カテゴリの完全な csv ファイルを読み取ることもできます。最初の繰り返しでは、カテゴリ「1」の行のみが処理されて「1.csv」に書き込まれ、2 番目のステップでは、カテゴリ「2」の行のみが「2.csv」に書き込まれます。ただし: これは、ファイルをカテゴリが存在する回数だけ読み取る必要があることを意味します。

この目的のためのエレガントなソリューションがあるかどうか知っていますか?

また、Linux ベースのソリューションも高く評価しています。Javaプログラムを作成する必要はないのではないでしょうか? そのawkが選択のツールになると思いますか?

ご協力いただきありがとうございます!

4

2 に答える 2

3

awkこのワンライナーを試してください:

awk -F, '{print >> "output"$NF".csv"}' input.csv

各行を読み取り、行の最後のフィールドの値に基づいて、適切な出力 csv ファイルに書き込みます。

于 2013-09-02T13:57:01.273 に答える