2017-11-24 15 views
1

Data2に含まれていないData1の値を検出したいとします。 私が含まれている2つの変数があります:私はシェルスクリプト:ソースリストに差異リストのデータがないかどうかを検出する方法

1c1,4 
< 
--- 
> PF5_SBCA-B 
> PF10_SBCE-F 
> PF10_SBCA-B 
> PF5_SBCC-W 

代わりの

を取得し、私は

res=$(diff <(echo "$Data1") <(echo "$Data2")); 
echo "$res" 

を試してみてください

Data1="PF10_SBCA-B 
PF5_SBCA-G 
PF10_SBCE-F 
PF10_SBCC-W" 

Data2="PF5_SBCA-B 
PF10_SBCE-F 
PF10_SBCA-B 
PF5_SBCC-W" 

PF5_SBCA-G PF10_SBCC-W 

お願いします。ありがとう

+0

[あなたと同じ出力を得ていません](https://ideone.com/zsWJku)のため、使用しているdiffのバージョンを記述することが重要です。 – Aaron

+0

入力のソートを試してみてください。例えば ​​'diff <(echo" $ Data1 "| sort)<(echo" $ Data2 "| sort)'のようになります。しかし、まさにあなたが望むものを与えません。 –

+0

私はこのような出力を有する:PF10_SBCA-B PF10_SBCE-F PF5_SBCA-B PF5_SBCC-W PF10_SBCA-B PF10_SBCC-W @WilliamPursell閉じるた – user6223604

答えて

0

2つ目のリストの値を連想配列に読み込んで、最初のリストの値を配列に対してチェックします。 $のData1の値に

declare -A data2 
while IFS= read -r key; do 
    data2[$key]= 
done <<< "$Data2" 

while IFS= read -r key; do 
    [[ -v data2[$key] ]] || echo "$key not in Data2" 
done <<< "$Data1" 
0

は単にループと、彼らは$データ2に存在しているかどうかを確認:

#!/bin/bash 
# 
Data1="PF10_SBCA-B 
     PF5_SBCA-G 
     PF10_SBCE-F 
     PF10_SBCC-W" 

Data2="PF5_SBCA-B 
     PF10_SBCE-F 
     PF10_SBCA-B 
     PF5_SBCC-W" 

for value in $Data1 
do 
    if [ $(echo $Data2 | grep -c $value) -eq 0 ] 
    then 
     echo $value 
    fi 
done 

出力:

PF5_SBCA-G 
PF10_SBCC-W 
5

だけでcomm + sortコマンド:

comm -23 <(sort <<<"$Data1") <(sort <<<"$Data2") 

出力:

PF10_SBCC-W 
PF5_SBCA-G 

概要:comm [OPTION]... FILE1 FILE2

  • -2 - 抑えるカラム2(FILE2に固有の線)
  • -3 - 3欄(行を抑制すること両方のファイルに表示されます)

FILE1に固有の行が印刷されます。

関連する問題