2013-04-05 2 views
0

내 파일은 다음과 같습니다.타임 스탬프에 대한 grep 출력 정렬

[2013] [ a] INFO : [handleMessage] Handling messages ... 

[2013] [ b] INFO : [handleMessage] The message received is: [OS  OS-EVNTSVR0-H     20130404125956465000RFST M430 F     ] 
[2013] [ c] INFO : [handleMessage] Complete handling message. 

[2013] [ a] INFO : [handleMessage] Handling messages ... 

[2013] [ b] INFO : [handleMessage] The message received is: [OS  OS-EVNTSVR0-H     20130404135956465000RFST M430 F     ] 

[2013] [ c] INFO : [handleMessage] Complete handling message. 

받은 메시지 만 캡처하고 싶습니다. (내가 벌써) 메시지를 캡쳐 한 후 세 번째 열의 타임 스탬프 값으로 정렬해야합니다. 그러나 그것은 결국 일부 문자를 포함합니다. (예 : 위의 파일 20130404125956465000RFST 및 20130404135956465000RFST)

나는 많은 메시지를 받았는데이 명령을 사용합니다.

gzgrep 'The message received is:' Receiver.log.2013-04-04*.gz | cut -d"[" -f5 | sort -t -n -k3 

그러나 접미사 문자로 인해 숫자 정렬은 작동하지 않습니다. 이 정렬 부분에 대해 아무도 도와 줄 수 없습니다. 시간 소인 값을 정렬해야합니다. 당신의 타임 스탬프를 별도의 단어와 형태 20 digits + 4 upperspace characters의 (당신이 정규식을 조정할해야 할 수도 있습니다) 경우

답변

0
$ cat test.log.gz 
[2013] [ a] INFO : [handleMessage] Handling messages ... 
[2013] [ b] INFO : [handleMessage] The message received is: [OS  OS-EVNTSVR0-H     20130404125956465000RFST M430 F    ] 
[2013] [ c] INFO : [handleMessage] Complete handling message. 
[2013] [ a] INFO : [handleMessage] Handling messages ... 
[2013] [ b] INFO : [handleMessage] The message received is: [OS  OS-EVNTSVR0-H     20130404135956465000RFST M430 F    ] 
[2013] [ c] INFO : [handleMessage] Complete handling message. 

$ zcat test.log.gz | perl -ne 'if (/The message received is:/) { push @a, ($_ =~ /\b(\d{20})[A-Z]{4}\b/) } }{ print join "\n", sort @a' | sort 
20130404125956465000 
20130404135956465000 

이 작동합니다. 이게 당신이 원하는대로합니까?

+0

답장을 보내 주셔서 감사합니다 ..이 작품 ..하지만 어떤 경우에는 별도의 단어가 20 자리 + 4 대문자와 같지 않습니다. 20 자리가 다를 수 있습니다. 처음 16 자만 타임 스탬프로 찍어야합니다 .. – user2247684

1

사용 sort -nk3.18man sort에서 필드 3

의 마지막 네 문자를 제외하려면 :

-k, --key = KEYDEF 키를 통해 일종의; KEYDEF는 위치 및 유형을 지정합니다.

KEYDEF는 시작 및 정지 위치에 대해 F [.C] [OPTS] [F, .C] [OPTS]입니다. 여기서 F는 필드 번호이고 C는 문자 위치입니다. 들; 둘 다 ori- gin 1이고, 정지 위치의 기본값은 라인의 끝입니다. -t 또는 -b가 모두 유효하지 않으면 필드의 문자는 앞의 공백 문자의 부터 시작하여 으로 계산됩니다. OPTS는 키에 대해 글로벌 주문 옵션을 무시하는 하나 이상의 단일 문자 주문 옵션 [bdfgiMhnRrV]입니다. 키가 지정되지 않은 경우 전체 행을 키로 사용하십시오. e

+0

답장을 보내 주셔서 감사합니다 ..이 작품은 나를 위해 .. Logged – user2247684

관련 문제