在 bash 的 for 循环中使用 grep

时间:2021-07-02 14:17:45

标签: bash awk

所以,我有 2 个文件:第一个是名称列表,不仅包括字母数字字符(例如像“John$on”这样的条目)。第二个是字符串列表。 我的目标是创建一个脚本,该脚本能够获取文件 1 中的所有条目并在文件 2 中查找它们,最后生成一个文件,其中包含文件 2 中的所有行,其中包括文件 1 中的每个单词。 我尝试过 Bash 脚本,但是

for line in $file1
do
    cat $line
    grep -Pi $line $file2 >> final_list.txt
done

没有用。我也尝试将 $line 放在 "" 之间,但它不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这可能是您正在寻找的,但如果没有示例输入/输出,则只能猜测:

awk '
NR==FNR {
    words[$0]
    next
}
{
    for (word in words) {
        if ( !index(" "$0" "," "word" ") ) {
            next
        }
    }
    print
}
' file1 file2

答案 1 :(得分:1)

我没有注意到我使用的模拟器自动选择了 Perl Regex,这影响了我的原始脚本。

答案 2 :(得分:0)

<块引用>

... 文件 2 中的所有行,包括第 1 行中的每个单词。

您肯定是指文件 1 而不是 第 1 行。不幸的是,grep 无法选择仅输出所有模式匹配的行,但我们可以使用它来预选具有任何匹配项的行并测试这些行是否存在匹配总数:

n=`wc -l <$file1`
grep -f$file1 $file2 |
while read line
do  [ `grep -of$file1 <<<"$line" | sort -u | wc -l` -eq $n ] && echo "$line"
done
相关问题