2017-05-12 15 views
0

私の最初の記事は、これがどうなるか見てみましょう。bashの排他的な配列

私は複数の「ホストリスト」がある問題に取り組んでいます。 1つはLinux用、1つはWindows用、もう1つはプリンタ用です。

また、現在監視されているもののリストもあります。

私はいくつかのコードを試して、ホストリストを統合し、そのリストと現在の監視リストとの差分を取得しようとしています。

私は私がここにあるいくつかの良いコードが見つかりました:ARRAY3が理想的であるべき

Array1=("key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10") 
Array2=("key1" "key2" "key3" "key4" "key5" "key6") 

Array3 =diff(Array1, Array2) 

を: ARRAY3 =( "key7が" "key8" "key9" "key10")

これは私を与えます追加が必要なもののリストと信じられないほどうまく機能します。

は、配列2は、その値だった「key11」

私は同じ差分を使用している場合は、私が以前の値とkey11のすべてを取得する要素が含まれていることを前提とします。

Array1=("key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10") 
Array2=("key1" "key2" "key3" "key4" "key5" "key6" "key11") 

Array3 =diff(Array1, Array2) 

これは キー11 key10を出力.....

私は2つのことを行う必要があると思います:

  1. すべてのもののリスト1 = 2ではなくということ!すべてのものの2!= 1

  2. リストその2!= 1ではなく1!= 2

私はこれらのコンテンツが私が制御しないCSVからいっぱいであり、各ホストリストの命名規則が変わるということは、配列の順序/数/等が未知の。 どうすればいいですか?私はこのコードだけでなく、ロジックを見ることができます。どんな援助も大いに感謝しています。この週末、私を苦しめることから救ってください。

+1

'Array3 = diff(Array1、Array2)'とは何ですか?それは間違いなくbashではないからです。答えの1つではなく、質問[here](http://stackoverflow.com/questions/2312762/compare-difference-of-two-arrays-in-bash/2315541)からコードをコピーしましたか? – 123

+0

bashが必要な理由はありますか?このように、 'set'をサポートする言語で達成するのは簡単かもしれません。たとえば、Pythonで 'set(Array1)-set(Array2)'を実行するだけです。 – 0x5453

+0

キーの各リストを別々のファイルに入れている場合(またはそうすることができる場合)、これは 'comm 1) 'コマンド。詳細なマニュアルを読んでください。 – Jens

答えて

0

あなたはそうのような2つの配列の違いの配列を取得することができます

我々は最初のアレイを用いて印刷される <()プロセス置換、との一時的なFDSとしてそれらを提示することによって配列をソートし
Array3=($(sort <(printf "%s\n" "${Array1[@]}") <(printf "%s\n" "${Array2[@]}") | uniq -u)) 

新しい行の各項目。

にパイプされ、ユニークな項目のみが出力され、$()には全体がラップされ、ラベリングアレイ()に入力されます。

+0

これはちょっとわかりやすく説明はすばらしかったです。しかし、私はどのようにして一つのリストにあるものを得ることができますか? –

関連する問題