(26)【tee】シェルスクリプトコマンド活用紹介

teeコマンド

  • ファイルへのリダイレクトとパイプを同時に行う
  • 出力するファイルは都度新規作成ではなく追記する

teeコマンド概要

teeコマンドは、標準入力から受け取った出力を、標準出力へ出力しつつ、同時にファイルに書き出すコマンドです。

teeコマンドの書式

コマンド | tee ファイル | コマンド2
コマンド | tee ファイル1 ファイル2 ファイル3……

teeコマンドの主なオプション

オプション 意味
-a 指定したファイルが既に存在する場合、新規にファイルを作成せずにすでに存在するファイルに追加する(リダイレクトの「»」に相当)

teeコマンド詳細説明

ファイルへのリダイレクトとパイプを同時に行う

以下のコマンドは、画面に出力をしつつ、同じ内容を output.txtに出力しています。

$ cat /var/log/httpd/access.log | sort | uniq -c | sort -n | head -n15 | tee output.txt

出力するファイルは都度新規作成ではなく追記する

teeコマンドは指定されたファイルを新規作成して出力内容をファイルに書き出します。-a オプションを付けることによって、append(追記)することができます。

output.txtに出力を追記する

# 予めファイルを生成しておく
$ :>output.txt
$ cat /var/log/httpd/access.log | sort | uniq -c | sort -n | head -n15 | tee -a output.txt
# 時間をおいて再度実行すると追記される
$ cat /var/log/httpd/access.log | sort | uniq -c | sort -n | head -n15 | tee -a output.txt
ヒント
teeコマンドの -aオプションは非常によく使います。
teeコマンドの出力をファイル書き出す場合、デフォルトは「>」と同等の処理で、-aオプションを付けることによって「»」と同様に処理となります。
注意
「»」も同様に tee -aの場合は、予めファイルを作成しておき、そのファイルに対して「»」やtee -aを行います。追記する最初の処理段階でファイルが存在していることを明示的に書いておくことが重要です。
以下のまとめのように、追記する前に上書きする処理をしておく場合は、あらかじめファイルの生成をする必要はありませんが、明示的に「 $ :> filename 」のようにファイルを生成しておくと、ソースがわかりやすくなります。

まとめ
echoだと以下のとおりです。ファイルには出力されるが、画面には処理内容が出力されないのでいまいち不便。

# 上書き
$ echo "文字列" > fileName
# 追記
$ echo "文字列" >> fileName

そこで、処理の出力内容が画面にも表示されるようteeを使う

# 上書き
$ echo "文字列" | tee fileName
# 追記
$ echo "文字列" | tee -a fileName

書籍の紹介

NQueen日記 2022/08/04

NQueen日記 2022/08/04

(25)【uniq】シェルスクリプトコマンド活用紹介

(25)【uniq】シェルスクリプトコマンド活用紹介