'egrep -o“success | error | fail”<filename>에 대한 대안 | 정렬 | 유니크 -c '


8

때로는 일부 로그를 확인해야 하며이 명령 으로이 작업을 수행합니다.

egrep -o "success|error|fail" <filename> | sort | uniq -c

샘플 입력 :

test error on line 10
test connect success
test insert success
test started at 00:00
test delete  fail

샘플 출력 :

1 error
1 fail
2 success

짧은 명령 으로이 작업을 수행하는 방법을 알고 있는지 알고 싶습니다.

왜 다른 명령 으로이 작업을 수행하고 싶은지 묻기 전에 특별한 이유는 없습니다.

답변:


4

여기 awk방법이 있습니다

awk 'BEGIN{RS=" "}/success/{s++}/fail/{f++}/error/{e++}END{print "Success:"s" Failed:"f" Error:"e}' abc

그러나이 모든 라이너는 우리의 오래된 것보다 조금 길어질 것입니다. grep


4

아니, 나는 당신이 얻는만큼 좋은 것 같아요. 당연히 하나의 펄 스크립트로 할 수 있습니다.

perl -nle  's/.*(error|fail|success).*/$1/ && $a{$_}++ ; END {  print "$_ $a{$_}" for keys %a } ' test.txt

...하지만 더 복잡하고 덜 직관적입니다.


내 질문에 샘플 입력을 추가했습니다 ... 이제 명령이 수행하는 작업이 더 명확 해
지길 바랍니다

1
좋아, 나는 그에 따라 perl oneliner를 수정했다. 그래도 egrep을 사용하는 솔루션이 더 좋고 직관적이라고 생각합니다.
1 월

2

훨씬 짧지는 않지만 실제로 정규 표현식이 필요하지 않기 때문에 fgrep( grep -F)가 있습니다.

fgrep 'success
error
fail' "$filename" | sort | uniq -c

bash에서 같은 것을 쓰는 또 다른 방법 :

fgrep $'success\nerror\nfail' "$filename" | sort | uniq -c

1

간단한 bash 스크립트를 작성한 후 다음과 같이 스크립트를 호출 할 수 있습니다.

#!/bin/bash
egrep -o "success|error|fail" "$1" | sort | uniq -c

(예를 들어)로 저장하십시오 myscript.sh. 그런 다음 a를 수행하면 다음 chmod +x myscript.sh과 같이 호출 할 수 있습니다 myscript.sh <filename>.


그러나이 경우 명령은 같습니다 ... 방금 명령을 호출하는 스크립트를 만들었습니다.
Wolfy

나는 당신이 당신의 통나무의 빠른 속도를 원한다고 생각했습니다. 궁금한 점이 있습니다. 이미 제공 한 명령이 제대로 작동하는 경우 대체 명령을 원하는 이유는 무엇입니까?
jeremija

내가 말한 것처럼 : 나는 단지 다른 사람들이 어떻게 그런 일을하는지 궁금합니다. 많은 사람들이 사람들이 일을하는 공상 / 좋은 방법을 알고 있고 지금 일을하는 방법을 배우는 것을 좋아한다는 것을 깨달았습니다 ...
Wolfy

2
이 경우, 당신은 그 사람입니다 :-) 당신의 커맨드 라인은 훌륭하고 간결하며 명확하며 유닉스 커맨드 라인의 힘을 이용합니다. 다른 무엇을 원하십니까?
1 월

0

짧고 달콤하지만 명령은 용어의 발생을 계산하는 다소 회로적인 방법입니다. 아마도 무딘 직접적인 접근 방식을 취하고 쉘 루프 내부에서 grep의 -c 플래그를 사용합니다.

for i in success test fail; do echo `grep -c $i <filename>` $i; done

큰 로그 파일의 경우 짧지 않고 흥미롭지 않고 잠재적으로 더 빠릅니다 (아니오 sort). 나는 그것이 세탁이라고 말하고 싶었다.


-1

이것은 답이 될 수 있지만이 경우 sort에는 매우 쓸모가 없다고 생각합니다. 어쩌면 당신은 그것을 생략 할 수 있습니다. 그럼에도 불구하고 우리는 세 가지 다른 행동을 위해 세 가지 다른 명령을 사용하고 있습니다.

옵션 중 일부에 도달하면 단락 할 수는 grep있지만 어느 것을 보지 못합니다 ... :)


2
그렇지 않습니다. 그렇지 않으면 uniq은 검색어의 연속 인스턴스 만 계산합니다 . 예를 들어 성공, 성공, 실패, 성공이 있으면 uniq의 출력은입니다 2 success 1 fail 1 success.
1 월

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