Linux / コマンド / tac - ファイルを最後の行から逆順に出力
tacは、ファイルのレコード(区切りごとのデータ)を最後から最初の順に出力します。基本のレコード区切り文字は改行なので、ログの最新の項目を先に確認したり、行の順序を逆にする場合に使用できます。
この記事ではtacの基本的な文法と主なオプション、実際の使用例、関連コマンドとの違い、使用時の注意点について説明します。
catの名前を逆にしたコマンドで、ファイルのバイト自体ではなく、区切り文字で分けられたレコードの順序を逆にします。複数のファイルを指定すると、それぞれのファイルは順番に処理されますが、各ファイル内のレコードは逆順で出力されます。
基本的な文法
tac [オプション] [ファイル ...]
オプションや詳細な動作は実装やバージョンによって異なる場合があります。現在のシステムではtac --helpとman tacでインストールされたコマンドの説明を確認してください。
tac の基本的な使い方
行の順序を逆にする
最後の行が最初に出力されます。
tac events.log
複数ファイルの処理
各ファイル内部は逆順になり、ファイル引数の順序は保持されます。
tac january.log february.log
標準入力を逆順で出力する
パイプ入力も処理できますが、最初のレコードを決定するには全体の入力を受け取る必要があります。
printf 'one\ntwo\nthree\n' | tac
行の順序が逆になる結果
tacは文字ではなく、行の順序を逆に出力します。各行内の文字の順序はそのままです。
printf 'first\nsecond\nthird\n' | tac
例の出力:
third
second
first
時間順に積み重なるログを最新の行から読むときに便利ですが、タイムスタンプ順のソートのような作業ではありません。
既定では区切り文字は直前のレコードの末尾に属します。最終行に改行がないファイルでは、その行が最初に出力されても自動で改行が追加されないため、次の行の内容とつながることがあります。例えば printf 'a\nb' | tac は b と a が同じ行になり、末尾に改行が付きます。
主なオプション
| オプション | 説明 |
|---|---|
-s STRING |
改行の代わりに使用するレコード区切り文字を指定します。 |
-b |
区切り文字を次のレコードの先頭に付けたものとして扱います。 |
-r |
区切り文字列を正規表現として解釈します。 |
--help |
現在インストールされている実装のヘルプを表示します。 |
実践的活用例
最近のログから確認する
単純なテキストログであれば、最後の記録から見ることができます。継続的に追加されるログにはtail -fによる追跡が適しています。
tac application.log | less
区切り文字が異なるレコードの反転
GNU tacの-sでユーザー定義の区切り文字を指定します。
tac -s '---' records.txt
条件に合う最近の項目を探す
逆順で出力した後、最初の一致で停止すると、全体の結果を画面に流さずに最近の項目を探すことができます。例の access.log は自分のテキストログに置き換えます。検索条件の指定はgrepコマンドの使い方も参考になります。
tac access.log | grep -m 1 'ERROR'
tacと関連するコマンドの比較
| コマンド | 主な役割 | 適した状況 |
|---|---|---|
tac |
レコード順序を逆にする | 最後の行から読む |
cat |
元の順序で出力 | 出力とファイルを結合 |
tail |
最後の部分を一部出力 | 最近の数行だけ確認 |
sort -r |
値を基準に逆順に並べる | 内容を基準に並べる |
使用する際の注意点
並べ替えコマンドではありません
内容のサイズや時間値を解釈せず、現在のレコード順序のみを逆にします。
大きなストリームは遅延することがあります
入力の終わりを知る必要があるため、終わらないストリームには適していません。GNU版はパイプなどシークできない入力を一時ファイルへ保存する場合があり、TMPDIR や既定の一時領域の空き容量と、保存するデータの扱いにも注意します。
区切り文字オプションの移植性を確認する
-sと正規表現の動作はGNUの実装基準ですので、対象システムのマニュアルを確認してください。
FAQ
tacとsort -rは同じですか?
いいえ。tacは現在の行の順序を逆にし、sort -rは各行の値を比較して逆順に並べ替えます。
最後の10行だけを逆順に見たい場合はどうすればいいですか?
tail -n 10 ファイル | tacのように組み合わせることができます。
リアルタイムログを逆順で見ることはできますか?
終わらない入力は逆順処理が困難です。リアルタイム監視にはtail -fを使用してください。
複数のファイルを1つに混ぜて逆順処理しますか?
一般的には各ファイルを引数順に読み、ファイルごとのレコードを逆順に出力します。




