はじめに

こんにちは!今回はtacコマンドについて解説します。

tacは、ファイルの行を逆順で表示するコマンドです。“cat"の逆ですね。「ログファイルの最後の方から見たい」「ファイルを逆順にしたい」という時に活躍します。

ログの最新エントリから確認する、ファイルの行順を反転させるなど、意外と役立つコマンドですよ。

tacコマンドとは

tacは、ファイルの内容を逆順で出力する外部コマンドです。“tac” = “cat"を逆にした造語ですね。

catがファイルの内容を最初から最後まで表示するのに対して、tacは最後の行から最初の行に向かって表示します。ログファイルの最新部分を素早く確認する時に便利です。

基本構文

1
tac [オプション] [ファイル名]

ファイル名を指定しないと標準入力から読み込みます。

主なオプション

オプション 説明
-b 区切り文字をセパレータの前に付ける
-r REGEXを区切りとして使用
-s セパレータ(区切り文字)を指定

使用例

例1: ファイルを逆順で表示

1
2
3
4
5
6
7
8
9
cat << 'EOF' > /tmp/numbers.txt
1
2
3
4
5
EOF

tac /tmp/numbers.txt

実行結果:

1
2
3
4
5
5
4
3
2
1

ファイルが逆順で表示されます。

例2: ログファイルの最後から確認

1
tac /var/log/syslog | head -20

実行結果:

1
(ログの最新20行が表示される)

最新のログエントリから順に確認できます。

例3: 複数ファイルを逆順で表示

1
tac /tmp/file1.txt /tmp/file2.txt

実行結果:

1
2
(file2.txt の行が逆順)
(file1.txt の行が逆順)

複数ファイルを指定した場合、ファイル順は保持されます。

例4: パイプで標準入力から読み込み

1
seq 1 5 | tac

実行結果:

1
2
3
4
5
5
4
3
2
1

seqコマンドの出力を逆順にします。

例5: 区切り文字を指定

1
echo "a,b,c,d,e" | tac -s ','

実行結果:

1
e,d,c,b,a

カンマを区切り文字として処理。

例6: 段落を逆順で表示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cat << 'EOF' | tac -s '\n\n'
paragraph 1
line 2

paragraph 2
line 2

paragraph 3
line 2
EOF

実行結果:

1
2
3
4
5
6
7
8
paragraph 3
line 2

paragraph 2
line 2

paragraph 1
line 2

空行で区切られた段落を逆順に。

例7: CSVファイルの行を逆順で表示

1
2
3
4
5
6
7
8
cat << 'EOF' > /tmp/data.csv
name,age,city
Alice,25,Tokyo
Bob,30,Osaka
Charlie,35,Kyoto
EOF

tac /tmp/data.csv

実行結果:

1
2
3
4
Charlie,35,Kyoto
Bob,30,Osaka
Alice,25,Tokyo
name,age,city

CSVファイルが逆順に(ヘッダが最後に)。

例8: 標準入力から複数行を逆順に

1
echo -e "line1\nline2\nline3" | tac

実行結果:

1
2
3
line3
line2
line1

複数行を逆順にして出力。

例9: 正規表現を区切りとして使用

1
echo "apple123banana456cherry789" | tac -rs '[0-9]+'

実行結果:

1
789cherry456banana123apple

数字を区切りとして逆順に。

例10: awkと組み合わせて処理

1
tac /var/log/auth.log | grep "Failed password" | head -5

実行結果:

1
(最新のFailed password エントリ5個)

ログの最新部分から失敗ログをフィルタ。

Tips・注意点

catとの違い

1
2
3
4
5
# cat: 最初から最後へ表示
cat /tmp/file.txt

# tac: 最後から最初へ表示
tac /tmp/file.txt

逆順表示という点が大きく異なります。

大きなファイルの場合

1
2
3
4
5
# 効率的に最後の行だけ取得
tail -1 /tmp/largefile.txt

# tacは全体を逆順処理するので時間がかかる
tac /tmp/largefile.txt

ファイル全体が必要な場合に限ってtacを使いましょう。

区切り文字のデフォルト

1
2
3
4
5
# デフォルトは改行(\n)
tac /tmp/file.txt

# カンマ区切りの場合は明示的に指定
tac -s ',' /tmp/data.csv

デフォルトは改行ですが、他の区切り文字を使う場合は指定必須。

正規表現の注意

1
2
3
4
5
# -r で正規表現を有効化
tac -rs '\d+'  # 数字に基づいて分割

# プレーンテキストとして処理
tac -s '\d+'   # 文字列 '\d+' を区切りとして処理

-rフラグで正規表現が有効になります。

実践的な使い方

ログファイルの最新エラーを確認

1
tac /var/log/app.log | grep -i error | head -10

最新のエラーログ10件をすぐに確認。

テキストファイルの最後の方を読む

1
tac /tmp/longfile.txt | head -30 | tac

最後の30行を元の順序で表示。逆順表示を挟むことで効率化。

ファイルの統計情報を逆順で確認

1
2
3
4
5
tac << 'EOF'
Total: 1000
Processed: 800
Failed: 200
EOF

出力:

1
2
3
Failed: 200
Processed: 800
Total: 1000

統計情報を逆順で表示。

コミットログを新しい順に確認

1
git log --oneline | tac | head -20

最も古いコミットから新しい順へ(逆順処理でつぎ足しを予防)。

まとめ

tacコマンドのポイント:

  • ファイルの行を逆順で表示する
  • catの逆の機能
  • ログファイルの最新部分を素早く確認するのに便利
  • -s: 区切り文字を指定
  • -r: 正規表現を区切りとして使用
  • 大きなファイルではパフォーマンス注意
  • よく使う組み合わせ: tac file.txt | head, tail -f log | tac

ログを最新から確認したい、ファイルを逆順にしたい、そんな時はtacをさっと使えば効率的ですよ!