find + grep + awkの組み合わせを使用してください。

find + grep + awkの組み合わせを使用してください。

一部の情報を取得するには、リストファイル(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シェルに委任されていないため、機能しません。

おすすめ記事