各行の最後の単語を取得します。

各行の最後の単語を取得します。

straceによって生成された次の内容を簡単に含む大きなテキストファイルがあります。

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 42.93    3.095527         247     12512           unshare
 19.64    1.416000        2975       476           access
 13.65    0.984000        3046       323           lstat
 12.09    0.871552         389      2239       330 futex
 11.47    0.827229          77     10680           epoll_wait
  0.08    0.005779          66        88           fadvise64
  0.06    0.004253           4      1043       193 read
  0.06    0.004000           3      1529         3 lstat
  0.00    0.000344           0      2254      1761 stat
[...]
  0.00    0.000000           0         1           fallocate
  0.00    0.000000           0        24           access
  0.00    0.000000           0         1           open

最初のヘッダー行を除いて、システムコール列に対応する各行の最後のフィールドを取得したいと思います。これには以下が含まれます。

  • 共有をキャンセル
  • 使用する権利
  • 統計資料
  • ピューテックス
  • epoll_wait
  • ..
  • ...

これを試してみましたが、 tail -n -13 seccomp | awk '{print $5}'最初の行を無視できましたが、検索が具体化されていないため、エラー行を含む行の一部が無視されました。

これをどのように実装しますか?

ベストアンサー1

または次のようになります。

awk 'NR>2 {print $NF}' seccomp
unshare
access
.
.
.

2行目次の行の場合は、その行の最後のフィールドを印刷します。最後のフィールドの内容まで「拡張」してNFフィールド数を保存します。$NF


または、フィールドがない場合はレコード全体です(スペースでのみ構成され、デフォルトはFSフィールド区切り文字です)。

おすすめ記事