Awk와 패턴이 일치하는 레코드 수


13

그래서 last > lastloggedin마지막 시스템 재부팅 이후 클래스 마지막 로그인을 보여주는 파일을 작성하라는 명령을 받았으며 이제는 문자열 myawklastloggedin포함하는 행 수를 계산 / 결정하는 Awk 스크립트를 작성하라는 요청을 받았습니다 CFS264.

내가 했어 grep -c CFS264 lastloggedin


사용해야 awk합니까? 그렇지 않으면을 사용할 수 있습니다 grep -c CFS264 lastloggedin | wc -l.
Axel

2
@Axel : grep -c (something) (something) | wc -l것입니다 항상 "1"을 생산하고 있습니다.
G-Man, 'Reinstate

답변:


21

시작하려면 다음 awk과 같이 문자열이 포함 된 파일에서 행을 검색하십시오.

$ awk '/CFS264/ { .... }' lastloggedin

의 비트는 { .... }해당 문자열로 줄 수를 계산하는 데 필요한 명령입니다. 위의 작업이 작동하는지 확인하기 print $0위해 검색 문자열이 포함 된 행을 인쇄 하기 위해 in을 사용할 수 있습니다 .

$ awk '/CFS264/ { print $0 }' lastloggedin

계산에 대해 "awk counter"를 검색 하면 awk를 사용하여 레코드 수를 계산하지 않는 이 SO Q & A를 우연히 발견하게됩니다 . 여기에 표시된 방법은 설명하는 내용으로 충분합니다.

$ awk '/CFS264/ {count++} END{print count}' lastloggedin

$ last > lastloggedin

$ awk '/slm/ {count++} END {print count}' lastloggedin 
758

$ grep slm lastloggedin  | wc -l
758

$ grep -c slm lastloggedin
758

참고 :last 출력 에서 어떤 필드 CFS264가 관련되어 있는지 말하지 않습니다 . 사용자 이름이라고 가정하면 다음 awk과 같이 해당 필드 만 검색 하도록 명령을 추가로 제한 할 수 있습니다 .

$ awk '$1=="CFS264" { print $0 }' lastloggedin

죄송합니다, cfs264은 (는) 사용자 이름의 일부입니다. 시간을내어이 문제를 해결하도록 도와 주셔서 감사합니다. 매우 혼란스럽고 좌절했습니다.
TayshaunS

@TayshaunS-np, Q와 행운을 빌어 주셔서 감사합니다 awk.
slm

5

다음 예제는 lastloggedin파일이 필요없는 언급 된 횟수를 계산 합니다.

$ last | awk '$1=="yeti" { ++count } END { print count }' 
106

lastloggedin파일 을 사용하거나 파일 을 사용해야하는 경우 다음과 같은 방법으로 파일 을 사용할 수 있습니다.

$ last > lastloggedin
$ awk '$1=="yeti" { ++count } END { print count }' lastloggedin
106

사용하여 $1~/some_chars/모든 사용자 이름이 주어진 문자를 containig 또는 얻을 $1~/^prefix/로 시작하는 이름 만 일치 prefix:

$ last | awk '$1~/et/ { ++count } END { print count }'
106
$ last | awk '$1~/^ye/ { ++count } END { print count }'
106


추신:

스캔 man awk더 힌트 ... ;-)

awk 매우 보람이 있습니다 : 학습 시간이 매우 짧은 후에 많은 것을 할 수 있습니다 ...


2

마지막은 이전 재부팅의 사용자 로그인을 포함 할 수 있습니다. 따라서 다음은 마지막 재부팅 이후 사용자 만 인쇄합니다.

last | awk 'NR==1,$1=="reboot"{if ($1 ~ /cfs264/ ) { count+=1; }}END{ print count; }'

awk 명령의 첫 번째 부분은 범위를 지정합니다. 첫 번째 행부터 시작하여 첫 번째 열이 '재부팅'입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.