2014-11-07 3 views
1

다음은 더 깨끗한 해결책이 있습니까?파일의 첫 번째와 마지막 일치를 인쇄하십시오.

grep INFO messages | head -1 
grep INFO messages | tail -1 

INFO 또는 메시지의 길이는 임의적입니다.

당신은 당신이 원하는 얼마나 많은 일치 설정 -m을 사용할 수 있습니다
+3

INFO가 메시지에 나타나지 않거나 한 번만 발생하면 출력은 어떻게되어야합니까? 질문을 편집하여 샘플 입력 및 예상 출력을 표시하십시오. –

답변

5

시도 :

grep INFO messages | sed -n '1p;$p' 

그렙 - 메시지 -n 나오지
파일에서 패턴을 검색한다 '(1P); $ P는'- 첫 번째 (1P)를 인쇄하고 마지막 ($ p를) 라인

+1

감사합니다 @gniourf_gniourf 나는 그것을 놓쳤습니다 :) – SMA

+1

설명을 제공하는 것도 좋은 것입니다. – fedorqui

+0

정말 고마워요.이 일은 제 일을위한 자리에 부딪쳤고, 다른 사람들이 그 일을 안전하게 지켜줄 것이라고 생각합니다. – Greg

3

: 이제 tac와 함께 뒤로 파일을 인쇄 한 후 같은 논리를 사용하자, 마지막에 대한

grep -m1 "INFO" messages 

:

를 처음 들어

tac messages | grep -m1 "INFO" 

이렇게하면 전체 파일을 두 번 처리하지 않아도됩니다. 일치하는 항목이 발견 될 때까지 처리하게됩니다. man grep에서


:

-m NUM, --max 카운트 = NUM ​​일치하는 선 후 파일을 읽는 NUM

중지합니다. 입력이 정규 파일의 표준 입력이고 일치하는 NUM 개의 행이 출력 인 경우 grep은 후행 컨텍스트 라인이 있는지 여부에 상관없이 종료 입력 전에 마지막으로 일치하는 행 다음에 표준 입력이 에 위치하도록합니다. 그러면 에 대한 호출 프로세스가 검색을 재개 할 수 있습니다. grep이 NUM 개의 일치하는 줄 뒤에 멈 추면 은 후행 컨텍스트 줄을 출력합니다. -c 또는 --count 옵션이 도 사용되는 경우 grep은 NUM보다 큰 수를 출력하지 않습니다. -v 또는 --invert-match 옵션도 사용되는 경우 일치하지 않는 행을 출력 한 후 grep이 중지됩니다.

man tac :

전술 - 연결하여 내가 너희를 AWK 사용할 수 추측 역

1

에서 인쇄 파일이 배열의 모든 경기를 저장합니다

awk '/INFO/{a[++i]=$0}END{print a[1];print a[i]}' messages 

매우 많은 일치가있는 경우 메모리 소비 문제 일 수 있습니다. 대안은 첫 번째 및 가장 최근에 저장하는 것입니다 :

awk '/INFO/{a[++i>2?2:i]=$0}END{print a[1];print a[2]}' messages 

또는 ETAN으로

제안했다 (감사) :

awk '/INFO/{a=$0}a&&!i++{print}END{if(a)print a}' messages 

이 하나의 장점은이 일치하지 않는 경우 아무것도 인쇄되지 않습니다.

+0

모든 행을 저장할 필요가 없습니다. 가장 먼저 인쇄하고 가장 최근의 것을 저장하십시오. 좋은 점, 나 자신을 생각하고 다른 해결책을 생각해 냈습니다. "/ kernel/{a = $ 0} a &&! i {print; i = 1} END {print a} ' –

+0

고마워요. 감사합니다. –

+2

에드 모튼 (Ed Morton)처럼 하나의 성냥 (또는 없음)이있는 경우를 고려하는 것이 좋습니다. 어쨌든 +1 옵션에 대한 광범위한 설정 :) – fedorqui

2

awk '/INFO/{f[++c]=$0} END{ if (c>0) print f[1] ORS f[c] }' messages 

나 :

이 당신이 원하는 것을 할 수있다

awk '/INFO/{f[++c]=$0} END{ if (c>0) print f[1]; if (c>1) print f[c] }' messages 

샘플 입력과 예상 출력이 없어도 추측입니다.

+2

+1 항상 입력이 없다는 규칙에 따르는 것을 잊지 -> 출력 없음 ... –

관련 문제