大きなCSVファイルがあり、それをより小さなチャンクに分割したいと思います。以下を使用してCSVファイルを分割できることを知っています。
split -l 1000000 file.csv new
その結果、1,000,000行の部品が作成されます。ところが問題は割れたが原本も存在するという点だ。ディスク容量が不足しているため、元のファイルを保存せずにCSVを分割する方法はありますか?助けてくれてありがとう。よろしくお願いします。
ベストアンサー1
stat(1)
1つの方法はGNUとGNUを仮定することですtruncate(1)
。
#! /bin/sh
lines=1000000
size=$( wc -l "$1" | awk '{print $1}' )
tail=$(( size % lines ))
count=$(( size / lines ))
if [ $tail -ne 0 ]; then
let count++
fi
while [ $count -gt 0 ]; do
start=$(( (count - 1) * lines + 1 ))
fn=$( printf '%s_%05d' "$1" $count )
sed -n $start,\$p <"$1" >"$fn"
size_last=$( stat -c %s "$fn" )
truncate -s -$size_last "$1"
let count--
done
GNUがなければ、coreutils
Perlでも同じことができます。
lines
元のファイルはこのプロセスで失われるため、最初にいくつかの小さなファイル(たとえば100に設定)について上記をテストすることをお勧めします。