LINUXサーバーに保存されたCSVファイル(約10,000行、各行は300列)を保存しました。このCSVファイルを、それぞれ20レコードの500個のCSVファイルに分割します。 (元のCSVと同じCSVヘッダーを持つ各)
この変換を支援するLinuxコマンドはありますか?
関数にしました。 splitCsv <Filename> [chunkSize]
を呼び出すことができます
splitCsv() {
HEADER=$(head -1 $1)
if [ -n "$2" ]; then
CHUNK=$2
else
CHUNK=1000
fi
tail -n +2 $1 | split -l $CHUNK - $1_split_
for i in $1_split_*; do
echo -e "$HEADER\n$(cat $i)" > $i
done
}
発見: http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
Linux splitコマンドを使用します。
split -l 20 file.txt new
ファイル「file.txt」を、それぞれ20行のテキストを含む「new」という名前で始まるファイルに分割します。
詳細については、Unixプロンプトでman split
と入力してください。ただし、最初にfile.txtからヘッダーを削除する必要があります(たとえば、tail
コマンドを使用)。次に、各分割ファイルにヘッダーを追加し直す必要があります。
これはあなたのためにそれを行う必要があります-すべてのファイルはPart1からPart500と呼ばれることになります。
#!/bin/bash
FILENAME=10000.csv
HDR=$(head -1 $FILENAME) # Pick up CSV header line to apply to each file
split -l 20 $FILENAME xyz # Split the file into chunks of 20 lines each
n=1
for f in xyz* # Go through all newly created chunks
do
echo $HDR > Part${n} # Write out header to new file called "Part(n)"
cat $f >> Part${n} # Add in the 20 lines from the "split" command
rm $f # Remove temporary file
((n++)) # Increment name of output part
done
これは動作するはずです!!!
file_name
=分割するファイルの名前。10000
=各分割ファイルに含まれる行数file_part_
=分割ファイル名のプレフィックス(file_part_0、file_part_1、file_part_2..etcが続きます)
split -d -l 10000 file_name.csv file_part_