次の3つ以上の同じ行が連続して表示されるときにテキストファイルに行を表示する方法

次の3つ以上の同じ行が連続して表示されるときにテキストファイルに行を表示する方法

サンプルファイルの内容:

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. 出力をもう一度反転してください。

1つの質問:ファイルに次のものが含まれているとどうなりますか?

a
bbb
bbb
bbb
ccc
ccc
ccc
d

出力しますか?a そして bbb

関連情報