我有一个变量,其值如
"abc.def.ghi aa.bbb.ccc kk.lll.mmm ppp.qqq.lll"
以及具有值
的文件kk.lll.mmm
abc.def.ghi
我想从变量中删除这些值。文件和变量有一些相似但不相同的值。
答案 0 :(得分:2)
如果您不关心排序,维护集合的最简洁方法之一是使用关联数组。这为您提供了O(1)检查或删除项目的能力 - 比sed
## Convert from a string to an array
str="abc.def.ghi aa.bbb.ccc kk.lll.mmm ppp.qqq.lll"
read -r -a array <<<"$str"
## ...and from there to an *associative* array
declare -A items=( )
for item in "${array[@]}"; do
items[$item]=1
done
## ...whereafter you can remove items in O(1) time
while IFS= read -r line; do
unset "items[$item]"
done <file
## Write list of remaining items
printf 'Remaining item: %q\n' "${!items[@]}"
顺便说一句,如果原始数据是以关联数组开头的话,可以跳过大部分代码:
# if the assignment looked like this, could just start at the "while read" loop.
declare -A items=( [abc.def.ghi]=1 [aa.bbb.ccc]=1 [kk.lll.mmm]=1 [ppp.qqq.lll]=1 )