2017-08-02 16 views
0

入力文字列の値がマスター文字列の値と一致し、それからエコー「存在する」、そうでなければエコー「存在しない」というような方法で2つのコンマ区切り文字列(マスターと入力)を比較できます。例えば :2つのコンマ区切り文字列を比較する

master_list="customer,products,address" 
input="relations,country,customer" 

が得られるエコー "存在"

master_list="customer,products,address" 
input="address,customer,car" 

エコー "存在"(顧客とアドレスの両方に存在するので)が

master_list="customer,products,address" 
input="address" 
を与える(顧客が両方に存在するので)

エコー「現在」(両方のアドレスが存在するため)

master_list="customer,products,address" 
input="car" 
0 (何も一致していないので)

(何も一致しないため)エコー "不在" を与える

master_list="customer,products,address" 
input="humans,car" 

はエコー "不在" を与える

私は次のことを試してみました:

if [[ ",$master_list," =~ ",$input," ]]; then 
    echo "present" 
else 
    echo "absent" 
fi 

をそうではありませんワーキング。

答えて

1

これを実行する別の方法は、awkの通過です:

awk -F, -v master=$master_list '{ for (i=1;i<=NF;i++) { if (master ~ $i) { nomatch=0 } else { nomatch=1 } } } END { if (nomatch==1) { print "absent" } else { print "present" } }' <<< $input 

フィールドの区切り文字をに設定し、master_list変数を渡します。マスターとしてのe。入力とパターンマッチの各カンマ区切りの値をマスターに対して取る。もしマッチセットが0にマークされている場合は、それを1にセットします。最後に、マナーマーカーをチェックし、それに応じて存在または不在を印刷します。

2

あなたは内部greptrを呼び出すことによって、この比較のための機能を行うことができます。

compare() { 
    grep -qFxf <(tr ',' '\n' <<< "$2") <(tr ',' '\n' <<< "$1") && 
    echo "present" || echo "absent" 
} 

は次にとしてそれを呼び出す:

compare "customer,products,address" "relations,country,customer" 
present 

compare "customer,products,address" "car" 
absent 

compare "customer,products,address" "address,customer,car" 
present 
関連する問題