我有文件 1
BOB
JOHN
SALLY
我有文件 2
There was a boy called JOHN and he was playing with FRED while
JILL went off to find a bucket of water from TOM but she
fell down the hill.
我想遍历 file1 的单词并在 file2 中搜索这些。
我想打印在 file2 中找不到的单词。
所以输出是
BOB
SALLY
我想是如果 grep 失败,我想打印 grep 正在搜索的字符串。
我从这里开始:
grep -o -f file1 file2
当然,这会返回
JOHN
如何获取不匹配的原始搜索字符串 - 改为打印?
答案 0 :(得分:7)
这是完成此操作的 grep
单线:
grep -vxFf <(tr '[[:blank:]]' '\n' < file2) file1
BOB
SALLY
先使用 tr
将空格/制表符转换为换行符,然后使用 grep -vxFf
获取 file1
中不匹配的单词。
或者像大卫在下面的评论中建议的那样:
grep -vxFf <(printf '%s\n' $(<file2)) file1
答案 1 :(得分:5)
根据您展示的样品,您可以尝试以下操作吗。
awk '
FNR==NR{
arr[$0]
next
}
{
for(i in arr){
if(index($0,i)){
delete arr[i]
next
}
}
}
END{
for(i in arr){
print i
}
}
' file1 file2
答案 2 :(得分:3)
如果订单不重要,您可以使用:
awk '
FNR == NR { a[$1]=0; next }
{ for (i=1;i<=NF;i++)
if ($i in a)
a[$i]++
}
END {
for (i in a)
if (!a[i])
print i
}
' file1 file2
示例使用/输出
$ awk '
> FNR == NR { a[$1]=0; next }
> { for (i=1;i<=NF;i++)
> if ($i in a)
> a[$i]++
> }
> END {
> for (i in a)
> if (!a[i])
> print i
> }
> ' file1 file2
SALLY
BOB