在文件的行中搜索电子邮件地址-返回整行,使用bash



假设我有一个文件(sizes.txt)

daveclark@foo.com 0 23252 0
mikeclark@foo.com 0 45131 1
clark@foo.com 0 55235 0
joeclark@bar.net 33632 1
maryclark@bar.net 0 55523 0
clark@bar.net 0 99356 0

现在我有了另一个文件(users.txt)

clark@foo.com
clark@bar.net

我想做的是在sizes.txt中查找users.txt中特定电子邮件地址的每一行…在CentOS中使用循环、bash或一行。关键是,我需要找到只包含clark@foo.com然后clark@bar.net-这意味着每一行只能有一行。

脑海中浮现的最简单的方式。。。

for i in `cat users.txt`; do grep $i sizes.txt; done

但这不起作用,因为处理users.txt的第一行将返回包含daveclark@foo.com,mikeclark@foo.com和clark@foo.com.我明确希望该行包含"clark@foo.com"(第三行的sizes.txt)。处理第二行的users.txt,会出现同样的问题(它会返回maryclark@bar.net和clark@bar.net行)我知道这一定是一件我忽略了的非常简单的事情。

您要查找的是与grep完全匹配的内容。在您的情况下,这将是-w选项。

所以

对于cat users.txt中的i do
grep-w"^$i"大小.txt
完成

应该做到这一点。

干杯。

您可以只使用bash内置函数和语法来尝试这样的操作:

while read -r user ; do
  while read -r s_user s_column_2 s_column_3 s_column_4  ; do
    [ "${s_user}" = "${user}" ] && printf "%bt%bt%bt%bn" "${s_user}" "${s_column_2}" "${s_column_3}" "${s_column_4}"
  done < sizes.txt
done < users.txt

当使用大的size.txt文件时,这个嵌套的CCD_ 2可能会很慢。在这些情况下,您可以将其与awk 结合使用

相关内容