与えられた文字列で繰り返されない文字を見つける方法

与えられた文字列で繰り返されない文字を見つける方法

aaabefhhhhhthkkd繰り返されない文字のみを出力に抽出し、順序を維持する必要がある文字列があります。

文字列には大文字または小文字を含めることができます。

入力する:

aaabefhhhhhthkkd

出力:

beftd

上記の目的の出力を取得するには、このロジックをどのように定義する必要がありますか?

このコマンドを試してみましたが、部分的にのみ機能しました。

echo "aaabefhhhhhthkkd" | sed 's/./&\n/g' | uniq

上記の部分実行コマンドの出力:

a
b
e
f
h
t
h
k
d

テストする文字列の例:

String 1: aaabefhhhhhthkkd -> Output -> beftd

String 2: AAAbefhhhhhThkkD -> Output -> befTD 

String 3: AAAbefhMThkkD    -> Output -> befMTD 

ベストアンサー1

uniq隣接する重複項目に対してのみ機能します。したがって、使用する前に入力を並べ替える必要があります。例:

fold -w1 | sort | uniq -u | paste -sd ''
  • fold -w1あなたと同じですsed 's/./&\n/g'が、不要な改行文字を追加導入しません。
  • sort繰り返される文字を隣接させます。
  • uniq -u-uシングルトンのみを印刷することが重要です。
  • paste -sd ''結果をもう一度行にリンク

ソートのため、すべての場合に所望の出力順序を得ることはできない。

$ echo 'AAAbefhMThkkD' | fold -w1 | sort | uniq -u | paste -sd ''
  DMTbef

独自のソリューションをリリースしたくない場合は、いつでもPerlを使用できますMoreUtils

$ echo 'AAAbefhMThkkD' |
    perl -MList::MoreUtils=singleton -ne 'print singleton split //'
befMTD

おすすめ記事