一部の情報を取得するには、リストファイル(topコマンドの出力)をフィルタリングする必要があります。
- まず、findを使用してファイルを一覧表示する必要があります。
- 次に、パターンのある行を見つけるためにgrepする必要があります。
- 最後に、私は興味のあるコラムを選ぶべきです。
検索をバインドするためにgrepとawkを使用できないようです。
私の最初の試み:
find . -name "high-cpu.out" -exec grep "jboss" | awk '{ print $5 }' {} \;
find: missing argument to `-exec'
awk: fatal: cannot open file `{}' for reading (No such file or directory)
2回目の試み:
find . -name "high-cpu.out" -exec grep "jboss" {} \ | awk '{ print $5 }';
find: missing argument to `-exec'
助けが必要ですか?ありがとう
ベストアンサー1
代わりにAWKを使用してパターンを一致させることをお勧めしますgrep
。
find . -name "high-cpu.out" -exec awk '/jboss/ { print $5 }' {} +
これにより、使用量を+
多様化することができるため、呼び出し回数が-exec
減ります。awk
試してみると
find . -name "high-cpu.out" -exec grep "jboss" | awk '{ print $5 }' {} \;
代わりに、シェルは最初にパイプを処理しますfind
。これにより、find
「 '-exec'の引数がありません」エラーが発生しました。{} \;
渡された引数に含まれていません(それらはawk
)。
2回目の試みは失敗します。これは、閉じるセミコロンがパラメータから分離されてfind
いないため表示できないためです。awk
いずれにせよ、パイプはfind
シェルに委任されていないため、機能しません。