假设我有一个文件(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中找到sizes.txt中的每一行,在CentOS中使用循环,bash或one-liner。这是关键点,我需要找到仅包含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行)我知道这必须是一个非常简单的东西,我忽略了。
答案 0 :(得分:1)
您正在寻找的是与grep的完全匹配。在你的情况下,这将是-w选项。
所以
for
cat users.txt
中的我 grep -w“^ $ i”sizes.txt
完成
应该这样做。
干杯。
答案 1 :(得分:0)
你可以只使用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 "%b\t%b\t%b\t%b\n" "${s_user}" "${s_column_2}" "${s_column_3}" "${s_column_4}"
done < sizes.txt
done < users.txt
使用big size.txt文件时,这个嵌套的while
可能会很慢。在这些情况下,您可以将其与awk