技術

巨大サイズのファイルを扱うときに知っていれば便利なコマンド

最近、業務で何百メガなどの巨大なサイズのファイルを扱うことが多いです。

これぐらいのサイズになってくると、ファイルを開くだけでも一苦労です。なので、ちょっとした作業などはできれば、ファイルを開くことなくコマンドで解決したいものです。

そこで巨大サイズのファイルを扱うときに知っていれば、便利なコマンドをまとめてみました。

参照

基本中の基本 grep

まずはgrep。基本中の基本ですね。grepは、何かのコマンドの実行結果にフィルターをかけるために、

{適当なコマンド} | grep {表示したいワード}

見たいな使い方をすることが多いので、忘れがち(?)になりますが、grepの機能は検索です。ファイルに対しても当然使えます。

grep {検索ワード} {ファイル名}

のように使えます。対象をディレクトリにして再帰的に検索したりもできます。これも良くやることですが、今回は巨大ファイルを対象とした記事なので詳細は割愛します。

-nオプションで行数表示します。編集前提でその前段階で編集箇所を調査したいときなどに使います。

grep -n {検索ワード} {ファイル名}

また、検索結果が何行にもなることが予測される場合は、

grep {検索ワード} {ファイル名} | more -n {数字}


とやって、表示行数を絞ったりもします。

先頭表示と最終行表示

これも基本中の基本ですね。grepよりも使うことが多いです。

巨大ファイルをcatとかで開いたら大変なことになります。先頭行からページ単位で開きたいときは、lessコマンドやmoreコマンドで開きます。最終行まで行っても閉じないのと、開きながら検索できるのでlessの方が使い勝手が良いので、lessを使うことが多いです。

less {ファイル名}

最終行を何行か見たいときはtailコマンドを使います。-nオプションで表示行数を指定でき、このオプションとセットで使うことがほとんどです。

tail -n {数字} {ファイル名}

-fオプションでファイルの更新内容を随時表示します。別ウィンドウのターミナルでログを流しっぱなしにするときなどに、よく使います。が、最近はクラウドかやってもDockerなので、サーバーに直接入ってファイルを見ることは少ないのであまり使っていないですね。

tail -f {ファイル名}

編集

先頭行または最終行の削除

巨大ファイルで先頭行、もしくは最終行だけ削除したいということがあります。かといって、サイズが大きすぎるのでエディタで開いてやりたくないというときは、sedコマンドを使います。

先頭行を削除したい場合は、下記のコマンドでできます。csvファイルなどのヘッダーを削除したいときなどに

sed -i -e '1d' {ファイル名}

最終行の削除は、下記のコマンドでできます。こちらもcsvファイルなどで余計なフッターがついていて削除したいときなどに使います。

sed -i -e '$d' {ファイル名}

-iオプションで標準出力でなくファイルに上書きされます。

sedコマンドは置換コマンドです。ファイルの外から使うことはあまりありませんが、

sed s/置換対象文字列/置換後文字列/ ファイル名

で置換できます。しかし、これは、私は使うことはほとんどないです。置換の編集が必要な時は、ファイルを開いて置換箇所を確認しながら実行しています。

エンコードの変更など

ファイルのエンコードの変更はnkfコマンドでやるようにします。エディタでもできるのですが、巨大ファイルだと開くのも大変ですし操作ミスもしやすいです。コマンドの方が簡単ですし、どうせ変換後はコマンドで確認する必要があるので、最初からコマンドだけでやってしまいます。

nkfコマンドについては、別記事で書きました。

まとめ

以上、巨大サイズのファイルをゴニョゴニョするときにて知っていれば便利なもの、というか私がよく使うコマンドをまとめてみました。他にもあるかもしれませんが、今思いつくところだとこんなもんだと思います。