パイプを使用してファイルを検索するLinuxコマンド

パイプを使用してファイルを検索するLinuxコマンド

質問:ファイル/var/log/syslog/var/log/syslog.1

  • tr- すべてのプロセスが同じになるようにプロセス番号を削除します。

  • cut- プロセス名のみを表示します。

uniqそして、、sortコマンドを使用する必要があるようですhead

ベストアンサー1

サービス名は、syslogログファイル(デフォルトのsyslog設定を持つUbuntuシステムにあります)の5番目の列にあります。通常servicename[pid]:、たとえば、またはCRON[1233]:などntpd[9283]:で表されます。

5番目のフィールドを取得します。

awk '{ print $5 }' /var/log/syslog

このフィールドのすべてのアイテムを削除するには[:

awk '{ sub("[[].*", "", $5); print $5 }' /var/log/syslog

これで、次のようなリストが表示されます。

dhclient
dhclient
dhclient
CRON
ntpd
CRON
CRON
ntpd

ここで並べ替えて数を数え、一番上にある項目を保持します。

awk '{ sub("[[].*", "", $5); print $5 }' /var/log/syslog |
sort | uniq -c | sort -rn | head -n 5

これは次のように出力できます。

 27 dhclient
 23 CRON
 13 ntpd

(この特定のシステムには3つのサービスしかありません。)

数字を削除するには、でフィルタリングしますawk '{ print $2 }'


trとを使用することもできますが、cutIMHOこれらのツールは操作に比べて「簡単すぎる」。cut特に知っておくべきこと正確に切り取る区切り記号の数。列が複数の空白文字で区切られている場合は、cutこれを考慮する必要があります。

おすすめ記事