たとえば、次のファイルがある場合は、sedまたはawkを使用して同じパターン「CREATE CURRENT」で始まる連続行を削除したいと思います。
CREATE CURRENT = 'aaaa' ;
CREATE CURRENT = 'bbbb' ;
CREATE CURRENT = 'aaaa' ;
CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;
THIS IS A PARAGRAPH 1-1
CREATE CURRENT = 'cccc' ;
THIS IS A PARAGRAPH 2 ;
THIS IS A PARAGRAPH 2-2
結果は次のとおりです。
CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;
THIS IS A PARAGRAPH 1-1
CREATE CURRENT = 'cccc' ;
THIS IS a PARAGRAPH 2
THIS IS a PARAGRAPH 2-2 ;
ベストアンサー1
努力する
awk '{ if ( $1 "x" != before "x" ) print ; before=$1 ; } ' file
どこ
$1 "x" != before "x"
最初のフィールドの以前の値を使用したテストbefore "x"
暗黙的な文字列連結では、初期化されていない優先順位の値が許可されます。before=$1
$1の以前の値を覚えています。
OPの編集内容を更新します。
awk 'BEGIN {cc=0 }
/CREATE CURRENT/ { if ( !cc++) print ; else next ;}
{cc=0; print ;} '
- 連続した行は
CREATE CURRENT
一度だけ印刷されます。 - 他の行は
cc
値を再びアクティブにします。 - 新しい行を追加する
' '
か、すべてを1行に入れることができます。