私はPHPスクリプトを記述して、大きなテキストファイルを解析してそこからデータベースを挿入します。しかし、私のホストでは、ファイルが大きすぎて、PHPのメモリ制限に達しました。
ファイルには約16,000行あります。それをロードできるかどうかを確認するために、(最初は)4つの個別のファイルに分割したいと思います。
head -4000 file.txt
で取得できる最初の部分。中央のセクションは少しトリッキーです-tail
出力をhead
(tail -4001 file.txt | head -4000 > section2.txt
)にパイプすることを考えていましたが、別の/より良い方法はありますか?
実際、私のロジックはめちゃくちゃです-セクション2の場合、tail -12001 file.txt | head - 4000
のようにして、次のセクションのtail
引数を下げる必要があります。私はすでに混乱しています! :P
めちゃくちゃにしたくないが、それでもtail
とhead
を使用する場合は、最初から行数を使用してtail
を呼び出す便利な方法があります。終わり:
tail -n +4001 yourfile | head -4000
...しかし、ファイルを分割するためだけに作成されたより良い自動ツールが呼び出されます... split
!これはGNU coreutilsの一部でもあるので、通常のLinuxシステムには必要です。使用方法は次のとおりです。
split -l 4000 yourInputFile thePrefixForOutputFiles
(見る man split
疑問がある場合。)
あなたがしたように頭と尾を組み合わせることはうまくいきますが、これのために私はsed
を使用します
sed -n '1,4000p' input_file # print lines 1-4000 of input_file
これにより、迅速なシェル機能で問題を解決できます
chunk_it(){
step=4
start=1
end=$step
for n in {1..4} ; do
sed -n "${start},${end}p" "$1" > "$1".$start-$end
let start+=$step
let end+=$step
done
}
chunk_it your_file
これで、your_file.1-4000とyuor_file.4001-8000などになります。
注:bashが必要です