각 줄의 마지막 단어를 가져옵니다.

각 줄의 마지막 단어를 가져옵니다.

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
.
.
.

두 번째 줄 다음 줄의 경우 해당 줄의 마지막 필드를 인쇄합니다. 마지막 필드의 내용까지 "확장"하여 NF필드 수를 저장합니다 .$NF


또는 필드가 없는 경우 전체 레코드입니다(공백으로만 구성되며 FS기본값은 필드 구분 기호입니다).

답변2

grep옵션 -o(약식 )을 쉽게 사용할 수 있습니다 --only-matching.

grep -o "\w*$" filename
  • \w모든 단어 문자(영숫자 및 밑줄)와 일치합니다.
  • \w*여러 개의(0 포함) 단어 문자와 일치합니다.
  • \w*$줄 끝에서 여러 단어 문자 일치

tail -n +3다른 사람들이 제안한 대로 헤더를 건너뛰려면 다음을 사용하십시오.

tail -n +3 filename | grep -o "\w*$"

출력은 다음과 같습니다:

unshare
access
lstat
futex
epoll_wait
fadvise64
read
lstat
stat
fallocate
access
open

답변3

그것 으로 sed쉽습니다

sed '1,2d;s/.* //'
  • 1,2dd첫 번째 줄부터 두 번째 줄까지 삭제하고 교체한다는 의미입니다.tail
  • ubstitute 명령은 s마지막 공백 이전의 모든 항목을 제거하므로 열 수를 계산할 필요가 없습니다.

내가 아는 한, 시스템 호출에는 공백이 포함될 수 없으므로 이것이 작동합니다. 그렇지 않으면 문자 61에서 시작하여 처음 60자를 제거하는 이름을 사용할 수 있습니다.

sed '1,2d;s/.\{60\}//'

답변4

GNU greptailPerl 스타일 정규식 사용

grep -Po '.* \K.*' file | tail -12
unshare
access
lstat
futex
epoll_wait
fadvise64
read
lstat
stat
fallocate
access
open
grep -o '[^] ]*$' file | tail -12
unshare
access
lstat
futex
epoll_wait
fadvise64
read
lstat
stat
fallocate
access
open

관련 정보