2017-08-02 66 views
0

如何比較兩個以逗號分隔的字符串(主鍵和輸入),以使輸入字符串的任何值與主字符串的值相匹配,然後回顯「存在」,否則回顯「不存在」。 例如:比較兩個以逗號分隔的字符串

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" 

給回聲 「缺席」(因爲沒有匹配)

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變量作爲主人。將輸入和模式匹配中的每個逗號分隔值與主數據對齊。如果匹配集合不匹配標記爲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 
相關問題