既存の配列の固有値を使用して新しい配列を作成する [重複]

既存の配列の固有値を使用して新しい配列を作成する [重複]

他の配列の一意の値に基づいて新しい変数配列を作成しようとしても、目的の結果は得られません。

元の配列

# echo ${owner[*]}
390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 0a452389-5ed2-e46f-ad15-cc538c82650d 4232f23d-ed48-4b14-c0ea-aa911fd24920 8ee1b05f-2473-4c37-bfc5-ae393921b939

私が使用するコマンド

uniq=($(printf "%s\n" "${owner[@]}" | sort -u))

質問(すべての固有値をインデックス0の下に単一の値として保存します)

# echo ${uniq[0]}
0a452389-5ed2-e46f-ad15-cc538c82650d
390920ad-2858-e651-a4af-a9eaa6acaebb
4232f23d-ed48-4b14-c0ea-aa911fd24920
8ee1b05f-2473-4c37-bfc5-ae393921b939
e14c2413-7179-44f8-dfc3-b8624dcb10bb
# echo ${uniq[1]}

#

この配列で一意の値を取得するより良い方法を知っている人はいますか?

SmartOSでbashを使用する(Solarisに似ています)

編集する

また、各値を独自のインデックス番号の下に保存することを試みましたが、重複した値は削除されません。

uniq=($(printf "%s " "${owner[@]}" | sort -u))

答え1

uniq=($(printf "%s\n" "${owner[@]}" | sort -u | tr '\n' ' '))

すべきこと。

または、説明の説明に従ってIFSを修正してください。

答え2

echo "${owner[*]}"あなたのブランドを使う一つ長いひも。

あなたはそれを使用しなければなりませんprintf '%s\n' "${owner[@]}"

空白(または新しい行)が質問に貼り付けられた文字列の区切り文字である場合(投稿からコピーして貼り付ける)を使用して元の配列を復元できます。

$ owner=(390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb e14c2413-7179-44f8-dfc3-b8624dcb10bb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 390920ad-2858-e651-a4af-a9eaa6acaebb 0a452389-5ed2-e46f-ad15-cc538c82650d 4232f23d-ed48-4b14-c0ea-aa911fd24920 8ee1b05f-2473-4c37-bfc5-ae393921b939)

印刷可能:

$  printf '%s\n' "${owner[@]}"

390920ad-2858-e651-a4af-a9eaa6acaebb
390920ad-2858-e651-a4af-a9eaa6acaebb
e14c2413-7179-44f8-dfc3-b8624dcb10bb
390920ad-2858-e651-a4af-a9eaa6acaebb
e14c2413-7179-44f8-dfc3-b8624dcb10bb
390920ad-2858-e651-a4af-a9eaa6acaebb
e14c2413-7179-44f8-dfc3-b8624dcb10bb
390920ad-2858-e651-a4af-a9eaa6acaebb
390920ad-2858-e651-a4af-a9eaa6acaebb
390920ad-2858-e651-a4af-a9eaa6acaebb
e14c2413-7179-44f8-dfc3-b8624dcb10bb
390920ad-2858-e651-a4af-a9eaa6acaebb
e14c2413-7179-44f8-dfc3-b8624dcb10bb
390920ad-2858-e651-a4af-a9eaa6acaebb
390920ad-2858-e651-a4af-a9eaa6acaebb
390920ad-2858-e651-a4af-a9eaa6acaebb
390920ad-2858-e651-a4af-a9eaa6acaebb
0a452389-5ed2-e46f-ad15-cc538c82650d
4232f23d-ed48-4b14-c0ea-aa911fd24920
8ee1b05f-2473-4c37-bfc5-ae393921b939

次に、必要に応じてフィルタリングします。

$ printf '%s\n' "${owner[@]}" | sort -u
0a452389-5ed2-e46f-ad15-cc538c82650d
390920ad-2858-e651-a4af-a9eaa6acaebb
4232f23d-ed48-4b14-c0ea-aa911fd24920
8ee1b05f-2473-4c37-bfc5-ae393921b939
e14c2413-7179-44f8-dfc3-b8624dcb10bb

var uniqから値の配列を取得するには:

$ uniq=( $(printf '%s\n' "${owner[@]}" | sort -u) )

上記のすべての操作は、デフォルトのIFSが変更されたために機能します。
IFSが変更されると、結果も変更される可能性があります。

関連情報