로그 파일의 일부를 잘라내는 방법은 무엇입니까?

로그 파일의 일부를 잘라내는 방법은 무엇입니까?

8GB 로그 파일(Rails 프로덕션 로그)이 있습니다. 일부 날짜(행) 사이에 잘라야 합니다. 이 작업을 수행하려면 어떤 명령을 사용할 수 있나요?

답변1

그것은 마치

sed '1,/last date prior to chunk/d;/first date after chunk/,$d' logfile | tee cut-log | less

tee cut-log화면에서 파일의 내용을 볼 수 있습니다 cut-log.

편집하다:

fred.bear의 엄격한 기준을 충족하기 위해 여기에 sed 솔루션이 있습니다(물론 awk 솔루션이 더 예쁘긴 하지만).

b=BB; e=EE ;echo -e "AA\nAA\nBB\nBB\nCC\nCC\nDD\nDD\nEE\nEE\nFF\nFF" | sed -n ":b;/$b/b p;n;b b;:p;p;n;/$e/b e;b p;:e;p;n;/$e/b e;q"

답변2

FOO와 BAR(FOO와 BAR 포함) 사이의 모든 내용을 인쇄하려면 다음을 시도해 보세요.

$ sed -n '/FOO/,/BAR/p' file.txt

답변3

이렇게 하면 원하는 작업이 수행됩니다.
포함 및 제외 매개변수 날짜를 표시합니다.

# set Test args
set  2011-02-24  2011-02-26  "junk"

from="$1"
till="$2"
file="$3"

# EITHER ====                              +++++++++  
# Ouptut lines between two parameter dates INCLUDING the parameter dates
  awk -v from=$from -v till=$till '
    ($2 >= from) && ($2 <= till) { print $0 ; next }
    ($2 > till) { exit }' "$file"

# OR ========                              ---------
# Ouptut lines between two parameter dates EXCLUDING the parameter dates
  awk -v from=$from -v till=$till '
    ($2 > from) && ($2 < till) { print $0 ; next }
    ($2 >= till) { exit }' "$file"

필드 2의 (정렬된) 날짜를 테스트합니다. 다음은 테스트 데이터의 예입니다.

    98  2011-02-05 xxxx
    99  2011-02-05 xxxx
   100  2011-02-06 xxxx
   101  2011-02-06 xxxx

이것은테스트 데이터 생성기.

답변4

이렇게 큰 파일을 작업하는 것은 항상 어렵습니다.

한 가지 방법은 이 파일을 여러 개의 작은 파일로 분할하는 것입니다. 이를 위해 분할 명령을 사용할 수 있습니다.

split -d -l 50000 ToBigFile.data file_

분할된 경우에도 bash for 루프에서와 마찬가지로 파일을 계속 사용할 수 있습니다.

for f in `ls file_*`; do cat $f; done;

그러나 cat 대신 reverse grep을 사용하여 원치 않는 데이터를 제거할 수 있는데, 이는 이와 관련이 없습니다. (또는 필요한 개선 유형).

이 시점에서는 많은 작은 파일만 처리하게 되며 위에서 언급한 다른 명령은 많은 작은 파일에서 작동합니다.

완료되면 두 번째 for 루프를 사용하여 더 작은 새 파일을 다시 빌드할 수 있습니다.

for f in `ls file_*`; do cat $f >> NewFile.data ; done;

고쳐 쓰다 데이터를 여러 파일로 분할하기 시작하면 하드 드라이브가 많은 작업을 수행하므로 시간이 걸립니다. (이 문제에 대해서는 5분 정도 소요된 것으로 보입니다).

반면에 다음 단계는 더 빠를 수도 있습니다.

따라서 이 접근 방식은 간단한 grep, awk, sed 작업에는 의미가 없을 수 있지만 검색 패턴이 더 복잡해지면 속도가 더 빨라질 수 있습니다.

관련 정보