便利さ以外に、ファイルをcatingしてgrepにパイプすることの利点はありますか?便利なのは、以下のようなコマンドを履歴から取得する場合、カーソルが行の最後にあるため、同じファイルに対してgrepを実行するために異なるテキストでコマンドを変更するのが簡単なことです。
したがって、次の規則には他にどのような利点があるでしょうか。
cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main
の代わりに:
grep -in profile /var/tmp/trace.2043925204.xt
grep -n Profile-Main /var/tmp/trace.2043925204.xt
猫を避けた方がいい;行編集が重要な場合は、次のように記述します。
$ < filename grep pattern
その理由は、catを介してすべてのデータをプッシュすると、メモリとCPUリソースが消費されるためです。 stdinをリダイレクトするのではなく、引数としてファイル名を渡すことのもう1つの利点は、コマンドにファイルをmmap()するオプションを許可することです。
だれも「猫の無用な使用」に言及した人がいないとは信じられません http://www.smallo.ruhr.de/award.html
疑わしい利点が1つあります。あなたが長いパイプラインを持っているなら、それは猫と少し直交して見えます:
cat file | command1 | command 2 | command3
すべてのコマンドを一緒にクラスター化します。
もちろん他の人が言ったように(そして私はそうします)
< file command1 | command2 | command3
ほぼ同じことを実行します。とは言っても、猫はかなり小さく、本当に必要がないときに使用しても、コンピュータがダウンすることはありません。
通常、cat
を使用しても、ファイルに直接アクセスしても何も変わりませんが、grep
のように、引数として複数のファイルがあるかどうかを気にする特定のコマンドでは違いがあります。適例:
cat file1 file2 | grep SOMETHING
とは異なる出力になります
grep SOMETHING file1 file2
一致するファイル名が出力されます。ファイル名が不要な場合がありますが、これはcat
を使用する利点です。
メリットはありません。代わりに次のように構造化しても、カーソルが最後にあることはあまり問題になりません:< inputfile grep -args foo
この状況では、猫を使用する必要はまったくありません。 grepなどのツールはファイル名を引数として取るので、これは不要で時間の無駄です。
[root@un1xf00 root]# time cat passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
real 0m0.021s
user 0m0.000s
sys 0m0.030s
[root@un1xf00 root]# time grep root passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
real 0m0.002s
user 0m0.000s
sys 0m0.000s
[root@un1xf00 root]#
更新:これらのタイミングではディスクキャッシュが考慮されないことを指摘してくれた@Andy Lesterに感謝します。新しいことを学びました!しかし、ほんの一瞬の節約でとにかく大きな違いはありません。猫をgrepにパイプすることは、論理的な方法ではないと思います。自分で問題を完全に解決できるときに、誰かに問題を解決するよう依頼するようなものです。
編集のしやすさが唯一の真の利点であり、コマンドラインで編集している場合、cat
を実行してパイプを実行するのにかかる追加の時間は、実際には違いがありません。
ただし、シェルスクリプトでそれを行う理由はありません。
メリットはまったくありません。コマンドの変更について心配する代わりに、アクセラレータキーとショートカットを使用してシェルコマンドラインをより適切にナビゲートする方法を学びます。
いいえ、あなたが与える例ではそれは少し遅くなるかもしれません。
pipe
はcatとgrepの間に作成されます。これは、ファイル名を直接grepに渡す場合は必要ありません。ただし、これが原因でスループットの制限が発生する状況はないと思います。
入力をgrepにパイプする他の利点には、より高度なファイル読み取り機能を備えたユーティリティの使用など、事前の追加処理が含まれます。 (特にtee
、zcat
を参照)。