Programming

리눅스 로그 검색

TARGET이라는 메시지를 검색하고 TARGET을 포함한 50번째 줄까지의 로그를 확인할 수 있는 명령어

단순 확인용으로 사용시 GREP이 적합한 선택

grep -n "TARGET" sample.log | head -n 1 | cut -d: -f1 | xargs -I {} sed -n '{} , {}+50p' sample.log
grep -n "S6F11" sample.log:

sample.log 파일에서 "S6F11" 문자열이 포함된 줄을 검색합니다.
-n 옵션은 해당 줄 번호를 함께 출력합니다. 출력 형식은 줄번호:내용입니다.
head -n 1:

grep 명령어의 결과에서 첫 번째 줄만 가져옵니다. 이는 "S6F11"이 처음 등장하는 줄입니다.
cut -d: -f1:

head 명령어의 결과에서 줄 번호만 추출합니다. :를 구분자로 사용하여 첫 번째 필드(줄 번호)만 가져옵니다.
xargs -I {} sed -n '{} , {}+50p' sample.log:

xargs -I {}는 앞에서 추출한 줄 번호({})를 sed 명령어의 위치에 대입합니다.
sed -n '{} , {}+50p' sample.log는 {}번 줄부터 {} 줄 이후 50줄까지 출력합니다. {}는 S6F11이 포함된 줄 번호로 대체됩니다.

 

awk '/TARGET/ {found=NR} found && NR<=found+50' sample.log

 

명령어 분석:
/TARGET/:

awk는 각 줄을 처리할 때 주어진 패턴과 일치하는지 확인합니다.
여기서는 "TARGET"이라는 패턴을 찾고 있습니다. "TARGET"이 포함된 줄을 찾으면 그 줄에 대해 지정된 작업이 수행됩니다.
{found=NR}:

"TARGET"이 포함된 줄이 발견되면, found라는 변수를 현재 줄 번호(NR)로 설정합니다.
NR은 awk의 내장 변수로, 현재 처리 중인 줄 번호를 나타냅니다.
이 단계에서는 "TARGET"이 처음 나타난 줄의 번호를 found에 저장합니다.
found && NR<=found+50:

이 부분은 조건문으로 작동합니다. 조건이 참일 경우에만 해당 줄을 출력합니다.
found가 설정되어 있는지(found는 0이 아니므로 참), 그리고 현재 줄 번호(NR)가 found 줄 번호부터 50번째 줄 이내인지 확인합니다.
즉, "TARGET"이 포함된 줄부터 시작하여 그 줄 번호에서 50줄을 넘어가지 않는 경우에만 출력됩니다.
sample.log:

awk 명령어의 입력 파일입니다. sample.log 파일을 줄 단위로 처리하면서 "TARGET"이 포함된 줄과 그 이후의 50줄을 출력합니다.

 

 

1. Grep

  • 특징: grep은 매우 빠르고 효율적으로 텍스트 파일에서 특정 패턴을 검색하는 데 특화된 도구입니다.
  • 장점:
    • 대량의 데이터를 빠르게 처리할 수 있습니다.
    • 간단한 패턴 매칭 작업에 매우 적합합니다.
  • 단점:
    • grep은 텍스트를 검색하고 일치하는 줄을 출력하는 데 주로 사용되며, 이후 특정 줄 수를 출력하는 기능은 직접 지원하지 않습니다. 따라서 패턴 매칭 후 추가적인 텍스트 조작이 필요할 때는 추가 도구(예: xargs, sed)와 함께 사용해야 합니다.
  • 적합한 상황:
    • 로그 파일에서 특정 문자열을 빠르게 찾고자 할 때.
    • 단순한 패턴 매칭이 필요할 때.

2. Awk

  • 특징: awk는 더 복잡한 텍스트 처리 작업을 지원하는 프로그래밍 언어에 가까운 도구입니다. 패턴 매칭뿐 아니라 다양한 조건과 계산, 필드 조작 등이 가능합니다.
  • 장점:
    • 복잡한 조건 처리와 데이터를 구문 분석할 때 유용합니다.
    • 패턴 매칭 후 후속 작업(예: 줄 출력, 계산)을 바로 수행할 수 있습니다.
  • 단점:
    • 간단한 작업에서는 오히려 과도할 수 있으며, 복잡한 스크립트를 작성해야 하는 경우도 있습니다.
    • 다른 도구에 비해 약간 느릴 수 있습니다.
  • 적합한 상황:
    • 특정 패턴을 찾은 후 추가적인 작업이 필요한 경우(예: 특정 필드만 추출, 특정 조건에 따른 출력).
    • 텍스트의 특정 구조를 기반으로 복잡한 처리가 필요할 때.

3. Sed

  • 특징: sed는 스트림 편집기(스트림을 읽으면서 처리)로, 텍스트를 일괄적으로 편집하거나 특정 범위의 줄을 추출하는 작업에 적합합니다.
  • 장점:
    • 텍스트 파일의 대규모 편집 작업에 매우 효율적입니다.
    • 텍스트의 특정 범위를 빠르게 추출할 수 있습니다.
  • 단점:
    • awk보다는 덜 직관적일 수 있으며, 복잡한 작업에서는 더 복잡한 명령어를 필요로 합니다.
    • 복잡한 텍스트 처리에는 적합하지 않을 수 있습니다.
  • 적합한 상황:
    • 특정 줄 범위를 빠르게 추출하거나 텍스트를 대규모로 치환할 때.
    • 파일 내에서 특정 위치부터 연속된 줄을 출력할 때.

요약

  • Grep: 가장 빠르고 간단한 패턴 매칭이 필요할 때, 긴 로그 파일에서도 효율적으로 작동합니다.
  • Awk: 복잡한 조건 처리 및 데이터 조작이 필요한 경우 적합합니다.
  • Sed: 특정 줄 범위를 추출하거나 텍스트를 일괄 편집할 때 유용합니다.

긴 로그 파일의 경우:

  • 단순히 특정 패턴을 찾는 경우 grep이 가장 적합합니다.
  • 특정 패턴 이후의 줄을 출력하거나 복잡한 텍스트 처리 작업이 필요한 경우 awk가 더 적합할 수 있습니다.
  • 특정 패턴 이후의 정확한 줄 범위를 추출하고자 한다면 sed도 좋은 선택이 될 수 있습니다.