ファイルから重複した隣接行を削除する

ファイルから重複した隣接行を削除する

次のようなファイルがあるとしましょう。

foo1
bar
foo2
foo2
bar
bar
bar
foo3

私はそれを次のように減らしたいと思います:

foo1
bar
foo2
bar
foo3

デフォルトでは、隣接する場合にのみ重複エントリを削除します... bash関数の作成を開始しましたが、これを行う方法がわからないことに気づきました。

remove_duplicate_adjacent_lines(){
   prev='';
   while read line; do
     if test "$line" != "$prev"; then
        prev="$line";
        echo "$line"
     fi
   done;
}

しかし、問題はprevwhileループの範囲外です。 bashを使ってこれを行う方法はありますか?

ベストアンサー1

これがまさにこのuniqユーティリティの目的です。

$ uniq <File
foo1
bar
foo2
bar
foo3

bashの記録は良い例です。

history | uniq

上記のコードは行番号のため動作しませんが、次のように動作します。

cat ~/.bash_history | uniq

重複した隣接コマンドが削除されます。

からman uniq

フィルター隣接する一致線INPUT(または標準入力)からOUTPUT(または標準出力)を書き込みます。オプションがない場合、一致する行は最初の項目にマージされます。 [強調追加]

おすすめ記事