インフラエンジニアbacchiのわかったことまとめ

bacchi.me

LinuxやMacでファイルを分割したり、結合したり

ちょいちょい忘れがちなので、メモってたものを晒す。

以下の様などでかいファイルを見るのに、vimやらlessやらはありえないので分割したい。

% ls -alth backup.log
-rw-r--r-- 1 bacchi bacchi 3.0G 12月 30 01:52 test.log

% wc -l test.log
31901925 test.log

splitコマンドを使えはいい感じにわけわけしてくれる。

% split -l 100000 -a 3 -d test.log test.log.

% ls -alt test.log.*
-rw-rw-r-- 1 bacchi bacchi  90187498 12月 30 12:09 test.log.000
-rw-rw-r-- 1 bacchi bacchi  90334909 12月 30 12:09 test.log.001
-rw-rw-r-- 1 bacchi bacchi  86032330 12月 30 12:09 test.log.002
(略)
-rw-rw-r-- 1 bacchi bacchi 100366023 12月 30 12:11 test.log.317
-rw-rw-r-- 1 bacchi bacchi  81886466 12月 30 12:11 test.log.318
-rw-rw-r-- 1 bacchi bacchi  51115902 12月 30 12:11 test.log.319

分割の条件

splitコマンドによる分割では以下の方式でデータを区切ることができます。

このうち1つをオプションで指定します。未指定の場合は1000行ごとに区切られます。

複数を同時に指定した場合はエラーとなって処理は行われない。

  • -l [行数]
    • 分割する行数を指定することができる。
  • -b [バイト数]
    • 分割するバイト数を指定することができる。
  • -C [バイト数]
    • 分割するバイト数を指定することができる。 行の途中では切らないようにして、指定した長さを越えない範囲で可能な限り多くの文字数を含めるようにする。

分割後のファイルのprefixとsuffix

分割したファイルはデフォルトだと、

  • xaa
  • xab
  • xac

のようなわかりにくいファイル名で出力されてしまいます。

  • x のprefixの部分
  • aa, ab 等のsuffixの部分

を指定して、人間にわかりやすいファイル名にすることができます。

今回実行したコマンドを例に取ると、test.log. の部分はprefixで、-a 3 -d の部分がsuffixです。

-aオプションをつけることで、分割後のファイルのsuffixの文字数を指定することができ、

-dオプションをつけることで、suffixをアルファベットから、数字に変更することができます。

ファイルをがっちゃんこ(おまけ)

ファイルをがっちゃんこする場合はcatコマンドを使えばOK

% cat  [結合したいファイル1] [結合したいファイル2] [分割ファイル3] ... > [結合後の出力ファイル]

とか

splitコマンドで分割したファイルをがっちゃんこするにはワイルドカードを使えばOK。

% cat [結合したいファイル]* > [結合後の出力ファイル]
  • B!