2016-11-09 16 views
2

私は5,000行のテキストファイルを持っています。私は99行を超えないファイルに分割する必要があります。 vimでこれを行うことはできますか?そうでない場合、私の他の選択肢は何ですか?Vim:行数に基づいて1つのファイルを複数のファイルに分割

+0

'男split'があなたの友人 –

+0

である私は、私はVIMとWindowsでこれを行う方法を探していたより明確にされている必要があります。 – divided

+0

Cygwinをお持ちですか?これは、多くのLinuxツールをWindowsにもたらすもので、分割されています。 – Rob

答えて

8

まず、制御変数を定義します。

:let i = 1 

次に、制御変数の現在の値にちなんだ名前のファイルに1〜99行を書き、その行を切り取り、制御変数をインクリメントします。必要に応じて

:exec "1,99w! chunk-" . i|1,99d|let i = i + 1 

繰り返し何度でも:

[email protected]: 

これはあなたchunk-50からchunk-1という名前の50個のファイルを与える必要があります。

5000は99で割り切れないので、50行が残されます。 chunk-51に書きなさい:

:w chunk-51 
4

スプリットと呼ばれるツール:)このあなたのための

例を行いますがあります。

split -a 3 -d -l 99 my_big_file.txt big_file_chunk_ 

    -a 3 : says to use a unique 3 character suffix for each chuck file 
    -d : says make that suffix a number so 001 002 all the way to 999 
    -l 99: split file by line and have 99 lines or less in each chuck. 

    next are the source file name and if you want the prefix to use for each produced file. 

これは

big_file_chunk_001 
    big_file_chunk_002 
    .... 
という名前の元から最大99行で複数のファイルを作成します。
0

何か(未テスト)。

let lines = getline(1,'$') 
let nb_files = len(lines)/nb_rows 
for i in range(0, nb_files) 
    call writefile(lines[(i*nb_rows) : min([(i+1)*nb_rows-1, len(lines)-1])], 'chunk_'.i 
endfor 

かも

let lines = getline(1,'$') 
while len(lines) 
    call writefile(remove(lines,min([99,len(lines)-1])), 'chunk-'.i) 
endw 
関連する問題