Awk 在两个文件中显示不匹配的字符串
我正在尝试进行多重搜索。在一个文件中,我有一些单词,我想找回那些不在第二个文件中的单词 例如,如果我在文件1中得到灯和猫,并且我喜欢文件2中的猫,我需要有背光。文件1是一个2.800字的列表,文件2是一本900.000字的书。我希望得到那些2.800没有出现 有可能吗 我试过这个:Awk 在两个文件中显示不匹配的字符串,awk,grep,Awk,Grep,我正在尝试进行多重搜索。在一个文件中,我有一些单词,我想找回那些不在第二个文件中的单词 例如,如果我在文件1中得到灯和猫,并且我喜欢文件2中的猫,我需要有背光。文件1是一个2.800字的列表,文件2是一本900.000字的书。我希望得到那些2.800没有出现 有可能吗 我试过这个: awk 'FNR==NR {a[$1]; next} {for (i=1;i<=NF;i++) {if ($i in a) delete a[$i]}} END {for (i in a) print i}'
awk 'FNR==NR {a[$1]; next} {for (i=1;i<=NF;i++) {if ($i in a) delete a[$i]}} END {for (i in a) print i}' File1.rtf File2.rtf
awk'FNR==NR{a[$1];next}{for(i=1;i
- 文件名表明您正在处理RTF文件,需要先将其转换为纯文本
- 您基于
awk
的解决方案尝试只有在以下情况下才有效:(a)第二个文件不包含标点符号;(b)可以将单词变体(例如cat
与cat
)视为单独的单词
- 基于
grep
的解决方案将非常缓慢,因为它会为列表中的每个单词创建grep
子进程。除此之外,它还执行子字符串匹配,这可能不是您想要的
awk
命令的以下变体采用纯文本输入文件和
一个词的变体可以单独处理;换句话说:它只解决标点问题:
$ awk '
FNR==NR {a[$1]; next}
{
for (i=1; i<=NF; i++) {
# Remove punctuation from the field (word).
gsub(/[[:punct:]]/, "", $i)
if ($i in a) delete a[$i]}
}
END {for (i in a) print i}
' <(echo $'lamp\ncat') <(echo 'I love my cat.')
lamp
$awk'
FNR==NR{a[$1];next}
{
for(i=1;icat
和cat
不是同一个词。
$ awk '
FNR==NR {a[$1]; next}
{
for (i=1; i<=NF; i++) {
# Remove punctuation from the field (word).
gsub(/[[:punct:]]/, "", $i)
if ($i in a) delete a[$i]}
}
END {for (i in a) print i}
' <(echo $'lamp\ncat') <(echo 'I love my cat.')
lamp