1. ホーム
  2. bash

[解決済み] 大きなテキストファイルを、同じ行数の小さなファイルに分割するにはどうすればよいですか?

2022-03-16 07:28:44

質問

大きな(行数の)プレーンテキストファイルがあり、それを行数ごとに小さなファイルに分割したい。 例えば、2M行のファイルであれば、200k行を含む10個のファイル、または20k行を含む100個のファイル(さらに残りを1個のファイルに分割したいのですが、均等に分割できるかは問題ではありません)に分割したいのです。

私はPythonでかなり簡単にこれを行うことができましたが、私はBashとUnixユーティリティを使用してこれを行うための忍者のような方法があるかどうか疑問に思っています(手動でループとカウント/行の分割とは対照的に)。

どのように解決するのですか?

splitコマンドをご覧ください。

$ split --help
Usage: split [OPTION] [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -l, --lines=NUMBER      put NUMBER lines per output file
      --verbose           print a diagnostic to standard error just
                            before each output file is opened
      --help     display this help and exit
      --version  output version information and exit

こんな感じでいいんじゃないでしょうか。

split -l 200000 filename

という名前の200000行のファイルが作成されます。 xaa xab xac ...

もう一つのオプションは、出力ファイルのサイズによって分割するものです(やはり改行で分割します)。

 split -C 20m --numeric-suffixes input_filename output_prefix

のようなファイルを作成します。 output_prefix01 output_prefix02 output_prefix03 ... は、それぞれ最大20メガバイトの大きさです。