[解決済み] Bashで配列から一意な値を取得するにはどうすればよいですか?
2022-10-05 03:51:10
質問
とほぼ同じ質問をしています。 ここで .
配列の中に
aa ab aa ac aa ad
などがあります。
この配列からユニークな要素をすべて選択したい。
これは、単純に
sort | uniq
または
sort -u
を使っても、配列は何も変わりません...。
コードとしては
echo `echo "${ids[@]}" | sort | uniq`
私は何を間違えているのでしょうか?
どうすればいいのでしょうか?
少し面倒ですが、これで大丈夫でしょう。
echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '
ソートされた一意の結果を配列に戻して保存するには、次のようにします。 配列の割り当て :
sorted_unique_ids=($(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
シェルが
ここに
(
bash
が必要です)、余裕を持って
echo
に変更することで、処理を省略することができます。
tr ' ' '\n' <<< "${ids[@]}" | sort -u | tr '\n' ' '
2021年8月28日時点のメモです。
によると
シェルチェックwiki 2207
a
read -a
のパイプを使用すると、分割を避けることができます。
したがって、bashでは、コマンドは次のようになります。
IFS=" " read -r -a ids <<< "$(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')"
または
IFS=" " read -r -a ids <<< "$(tr ' ' '\n' <<< "${ids[@]}" | sort -u | tr '\n' ' ')"
入力です。
ids=(aa ab aa ac aa ad)
出力します。
aa ab ac ad
説明
-
"${ids[@]}"
- シェル配列の操作のための構文。echo
の一部として使われるか、あるいはここの文字列として使われるかに関わらず。この配列は@
の部分は、"配列のすべての要素"を意味します。 -
tr ' ' '\n'
- すべてのスペースを改行に変換します。配列はシェルからスペースで区切られた1行の要素として見られるため、また、sortは入力が別々の行であることを期待するためです。 -
sort -u
- ソートし、ユニークな要素のみを保持する -
tr '\n' ' '
- は、先ほど追加した改行をスペースに戻すように変換します。 -
$(...)
- コマンドの代用 -
脇です。
tr ' ' '\n' <<< "${ids[@]}"
はより効率的な方法です。echo "${ids[@]}" | tr ' ' '\n'
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] find .コマンドでディレクトリを除外する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ゼロからLinuxのisoイメージを作る方法(グラフィックチュートリアル)
-
deepinv20 linux ファイルのサフィックスを変更する方法は?Linuxでファイルの拡張子を変更する方法
-
deepin linuxからmacosx仮想マシンに直接ファイルをドラッグ&ドロップする方法は?
-
Kali Linuxのデフォルトのひげメニューアイコンを変更する方法は?
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] エクスポートされた環境変数を削除する方法を教えてください。
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?
-
[解決済み】UNIXシェルスクリプトでリストから一意または明確な値を選択する
-
[解決済み] Unixでソートせずにファイル内の重複行を削除する方法