2

大家好,

我想以以下目标为条件:

有两个文件,脚本检查 file1 的一个单词(位于变量 $word2test 中)如果在 file2 中退出(每个单词位于变量 $wordINlist 中)什么都不做 | 如果该单词不在 file2 中,则将其打印到 stdout

我的第一种方法是:

if ! [[ "$word2test" =~ "$wordINlist" ]] ; then
    echo $word2test
fi

提前感谢您的任何建议

4

3 回答 3

3

试试这个简单的 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"
于 2012-05-28T18:02:21.933 回答
1

如果您的文件是每行一个单词的简单列表,请尝试以下操作:

grep -Fvf file2 file1

或者

join -v 1 <(sort file1) <(sort file2)
于 2012-05-28T18:10:54.813 回答
1

假设$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)
于 2012-05-28T17:48:56.133 回答