다음 세 개 이상의 동일한 줄이 연속으로 나타날 때 텍스트 파일에 줄을 표시하는 방법

다음 세 개 이상의 동일한 줄이 연속으로 나타날 때 텍스트 파일에 줄을 표시하는 방법

샘플 파일 내용:

display this line
1111 aaaa
1111 aaaa
1111 aaaa
1111 aaaa
don't display this line
1111
1111

출력은 다음과 같아야합니다.display this line

답변1

확장 정규식 모드에서 GNU sed 사용:

$ sed -Ene '
    $!N;$!N;$d
    /^(.*)(\n\1){2}$/!D
    n;p
' file
display this line

패턴 공간에는 항상 3줄을 유지하세요. 패턴 공간의 3개 행이 모두 동일하다는 것을 확인할 때까지 패턴 공간에서 맨 위 행을 계속 잘라내거나 eof를 눌러 상점을 닫고 종료합니다.

답변2

질문을 완전히 바꾸신 것 같습니다. GNU sed

sed -nre '
    $!N
    :loop
        $bend
        N
     /(\n[^\n]*)\1$/bloop
     :end;h;s/(.*)\n.*/\1/
     s/^//;treset
     :reset;s/\n/&/3;g;TD
     P;s/.*\n/\n/;:D;D
' file
 display this line 

답변3

uniq -c여기에 매우 도움이 됩니다:

$ uniq -c file | tac | awk '$1 >= 3 {getline; print substr($0, 9)}' | tac
display this line
  1. 연속된 동일한 행 수 계산
  2. 출력 반전
  3. 원하는 반복 횟수가 있는 행을 찾습니다.
    • 다음 줄을 가져와서 계산하지 않고 인쇄하세요
  4. 출력을 다시 반전시키세요.

한 가지 질문: 파일에 다음이 포함되어 있으면 어떻게 됩니까?

a
bbb
bbb
bbb
ccc
ccc
ccc
d

출력하시겠습니까?a 그리고 bbb?

관련 정보