嗯,我认为很难。也许你会发现它很容易。
我有两个文件:BUYINGORDERS,PRODUCTMASTERLIST
BUYINGORDERS(ProductID,ProductDescription)是这样的:
1;fresh coke bottle 1 lt
2;cheese CheesyBrand yellow 2 kg
3;little newborn puppies 10 kg
PRODUCTMASTERLIST(ProductDescription,Price)是这样的:
CheesyBrand yellow cheap cheese 2 kg;3.40
bottle of very fresh coke of 1 lt;2.90
我需要在PRODUCTMASTERLIST中找到BUYINGORDERS中的描述。正如你所看到的那样,那些线条并不完全相同:匹配的条件是购买者中条目中的每个单词。 ProductDescription应该在PRODUCTMASTERLIST的ProductDescription中有任何订单。 PRODUCTMASTERLIST中的条目甚至可能包含更多单词。
所以,尽管略有不同,BUYINGORDERS的第1行与PRODUCTMASTERLIST的第2行相匹配,因为单词“fresh'”,“coke'”,“'瓶子'”,& #39; 1'和' lt'是#1瓶中非常新鲜的可乐瓶。
现在,我不是要求你做我的作业(当然,我不会抱怨),但我会非常感谢至少可能采取的措施。
答案 0 :(得分:0)
通过对值进行排序,您可以依赖" fresh。* coke"匹配"新鲜可乐"和#34;新鲜的friggin'焦炭"
答案 1 :(得分:0)
好的 - 没有给你完整的答案,我在这里解决它:
IFS
拆分分号bWords=( ${bDesc} )
)for bWord in ${bWords[@]}; do for pWord in ${pWords[@]}; do ...
)bWord == pWord
时,都会增加一个计数器。如果计数器达到bWords
中的字数,则表示您符合条件continue
- 我最近了解到你可以使用{ {1}}从内循环移动到外循环的下一次迭代。这很好。)这是一次蛮力搜索,因此效率不高。如果文件很大,可能会变慢。另一种方法是使用它来对每个描述进行哈希处理 - 如果你对如何生成哈希很聪明,你甚至可以使用二进制AND运算来查看是否包含了一个描述&# 39;在另一个。但我不确定Bash真的能做到这一点:)