大家好,
我想以以下目标为条件:
有两个文件,脚本检查 file1 的一个单词(位于变量 $word2test 中)如果在 file2 中退出(每个单词位于变量 $wordINlist 中)什么都不做 | 如果该单词不在 file2 中,则将其打印到 stdout
我的第一种方法是:
if ! [[ "$word2test" =~ "$wordINlist" ]] ; then
echo $word2test
fi
提前感谢您的任何建议
大家好,
我想以以下目标为条件:
有两个文件,脚本检查 file1 的一个单词(位于变量 $word2test 中)如果在 file2 中退出(每个单词位于变量 $wordINlist 中)什么都不做 | 如果该单词不在 file2 中,则将其打印到 stdout
我的第一种方法是:
if ! [[ "$word2test" =~ "$wordINlist" ]] ; then
echo $word2test
fi
提前感谢您的任何建议
试试这个简单的 bash 示例脚本:
word=foobar
grep -q "\<$word\>" FILE || echo "$word is *not* in FILE"
REGEX 的另一种方式:
word=foobar
grep -q "^$word *$" FILE || echo "$word is *not* in FILE"
如果您的文件是每行一个单词的简单列表,请尝试以下操作:
grep -Fvf file2 file1
或者
join -v 1 <(sort file1) <(sort file2)
假设$wordINlist
是一个数组(你说“列表”但我假设你的意思是数组),你可以像这样遍历它:
for item in ${wordINlist[@]}; do
[[ $item == $word2test ]] || echo $word2test
done
如果$wordINlist
是一个文件,那么你可以简单地通过它 grep:
egrep -q "\b${word2test}\b" "$wordINlist" || echo "$word2test"
找到egrep
匹配项时返回 true,否则返回 false。所以这只是说,“要么找到匹配,要么回显$word2test
”
如果您只想查看哪些项目 infile1
和 NOT in file2
,请使用comm
:
comm -23 <(sort -u file1) <(sort -u file2)