以下のようにtailコマンドを実行するファイルがあります。
tail -n+1 -F "./log/catalina.log"
このファイルの各行に、ファイル名自体である可能性がある別の文字列をサフィックスまたはプレフィックスとして追加して、ファイルの内容が次のようになるようにしたいと思います。
INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/9.0.1
INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Sep 27 2017 17:31:52 UTC
INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 9.0.1.0
INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
出力は次のようになります。
Cataline.log INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/9.0.1
Cataline.log INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Sep 27 2017 17:31:52 UTC
Cataline.log INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 9.0.1.0
Cataline.log INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
ベストアンサー1
パイプのもう一方の端からファイル名を取得するには、次のように-v
オプションを使用tail
して常にヘッダーを印刷できます。
$ tail -v file
==> file <==
test1
test2
最初の行をキャプチャしてプレフィックスを付けることができます。
$ tail -vf file | awk 'NR==1{f=$2;next} {print f,$0}'
file test1
file test2
上記のコマンドでは、ファイル名にスペースを含めないでください。この状況を扱うより良いバージョンは次のとおりです。
tail -vf file | awk 'NR==1{f=substr($0,5,length-8);next} {print f,$0}'
または、カスタムプレフィックスを使用します。
tail -vf file | awk 'BEGIN{p="custom prefix"} {print p,$0}'
カスタムサフィックスに似ています。
tail -vf file | awk 'BEGIN{s="custom suffix"} {print $0,s}'