Ily*_*uta 4 string bash filter
我有一个字符串列表,我想从另一个字符串的超集中删除,而不是以任何特定的顺序,从而构建一个新的集合.这在巴什是可行的吗?
看起来你正在寻找具有优于O(nm)运行时间的东西,所以这里是答案.Fgrep或grep -F使用Aho-Corasick算法从固定字符串列表中生成单个FSM,因此检查SET2中的每个字需要O(字长)时间.这意味着该脚本的整个运行时间为O(n + m).
(显然,运行时间也取决于单词的长度)
[meatmanek@yggdrasil ~]$ cat subtract.sh
#!/bin/bash
subtract()
{
SET1=( $1 )
SET2=( $2 )
OLDIFS="$IFS"
IFS=$'\n'
SET3=( $(grep -Fxv "${SET1[*]}" <<< "${SET2[*]}") )
IFS="$OLDIFS"
echo "${SET3[*]}"
# SET3 = SET2-SET1
}
subtract "$@"
[meatmanek@yggdrasil ~]$ . subtract.sh
[meatmanek@yggdrasil ~]$ subtract "package-x86 test0 hello world" "computer hello sizeof compiler world package-x86 rocks"
computer sizeof compiler rocks
[meatmanek@yggdrasil ~]$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8995 次 |
| 最近记录: |