次のコマンドを使用してcsvファイルを複数のファイルに分割しようとしています。コマンドは5つのファイルに分割されますが、ファイルの1つのデータが切り捨てられます。
この問題をどのように解決できますか?
>>split -n 5 -d -a 2 testfile
私の入力には5001行がありますが、次のように分割されます。
file1 - 932
file2 - 910
file3 - 1149
file4 - 1044
file5 - 966
各ファイルは1000行でなければなりませんか?
答え1
split -n 5
最後の部分を除くすべての部分が同じ量になるようにファイルを5つの部分に分割します。バイト。
行境界でのみ分割するには、次のようにします。
split -n l/5 -d -a 2 testfile
これはGNUドキュメントsplit
次のように:
'-n Chunks'
'--number=chunks'
入力をチャンク出力ファイルに分割します。ここでチャンクは次のとおりです。n generate n files based on current size of input k/n only output kth of n to stdout l/n generate n files without splitting lines l/k/n likewise but only output kth of n to stdout r/n like ‘l’ but use round robin distribution r/k/n likewise but only output kth of n to stdout
別のオプションは、各出力ファイルに必要な行数を指定することです。
split -l 1000 -d -a 2 testfile
上記はファイルを複数のセクションに分割し、各セクション(最後のセクションを除く)には1,000行があります。これは次のように文書化されています。
'-llines'
'--lines=lines'
各出力ファイルに行を置きます。
答え2
使用された-l
オプションsplit
。マニュアルページから:
-l line_count
Create smaller files n lines in length.
例えば
split -l 1000 afile.txt