テキストファイルに2行同じ内容が続いたら、その2行とも削除するワンライナーです。
perl -e 'while(<>){chop; if($a eq ""){$a = $_}elsif($a ne $_){print $a,"\n";$a=$_;}else{$a=""}} if($a ne ""){print $a,"\n"}'
たとえば、下記のテキストが与えられたとします。
A
A
B
C
C
C
D
D
D
D
E
以下の結果を得ます。
B
C
E
B と E は1行しか無いので残ります。
C は3つ続いているので、最初の2つが削除されて、1つ残ります。
これが必要になった状況はこんな感じでした。
2つのファイル b0.txt と b1.txt がありました。
b0.txt
A
C 789
b1.txt
A 123
B 456
C 789
最初のカラムだけに着目して、b1.txt では B が追加されたことを知る必要がありました。
あてずっぽうなので、もっといいやり方があったかもしれませんが、とりあえず…
diff b0.txt b1.txt | awk '($2!~/^$/){print $2}'
といった処理をして、以下の結果を得ました。
A
A
B
両方のファイルに現れた A は連続して2回出現するので、それを削除できれば、一方のファイルにしか現れない B を特定できると考えた次第です。
しかし、この例なら、両方のファイルから、まず、1カラム目だけ抜き出して diff とればいいだけですね(汗) 実際はいろいろといじくり回した後の結果だったので、最適な手順をとれなかったといったところでしょうか。
【補足】 下記スクリプトは最初に投稿したものです
nakataSynsuke さんのご指摘のとおり、下記の記述から文字列比較の部分を修正したのが、現在、冒頭にあげているスクリプトになっています。
perl -e 'while(<>){chop; if($a =~ /^$/){$a = $_}elsif($a !~ $_){print $a,"\n";$a=$_;}else{$a=""}} if($a!~/^$/){print $a,"\n"}'