サンプルファイルの内容:
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つの質問:ファイルに次のものが含まれているとどうなりますか?
a
bbb
bbb
bbb
ccc
ccc
ccc
d
出力しますか?a
そして bbb
?