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
フィールド区切り文字です)。