我有两个文件。

file1.txt:  
Afghans  
Africans  
Alaskans  
...  

在哪里file2.txt包含网页上WGE的输出,因此这是一个大草率的混乱,但确实包含了第一个列表中的许多单词。

bash脚本:

cat file1.txt | while read LINE; do grep $LINE file2.txt; done

这无法正常工作。我想知道为什么,所以我回应了循环内的$线变量并添加了睡眠1,所以我可以看到发生了什么:

cat file1.txt | while read LINE; do echo $LINE; sleep 1; grep $LINE file2.txt; done

终端的输出看起来像这样:

阿富汗人
非洲人
阿拉斯加人
阿尔巴尼亚人
美国人
GREP:中文:没有这样的文件或目录
: 没有这样的文件或目录
阿拉伯人
阿拉伯人
阿拉伯人/东印度人
: 没有这样的文件或目录
阿根廷人
亚美尼亚人
亚洲
亚洲印第安人
: 没有这样的文件或目录
file2.txt:亚洲火影忍者

因此,您可以看到它终于找到了"亚洲人"一词。但是为什么会说:

没有这样的文件或目录

有什么奇怪的事情发生还是我在这里错过了什么?

答案

@OP,首先,使用dos2unix如建议。然后使用尴尬

awk 'FNR==NR{a[$1];next}{ for(i=1;i<=NF;i++){ if($i in a) {print $i} } } '  file1 file2_wget

注意:在循环中使用时循环和GREP并非有效,因为对于每次迭代,您都需要调用grep在file2上。

@OP,粗略解释:有关FNR和NR的含义,请参考Gawk手册FNR==NR{a[1];next}意味着将File1的内容放入数组中a。当FNR不等于NR时(这意味着现在读取第二个文件),它将检查文件中的每个单词是否在数组中a。如果是,请打印出来。(for循环用于迭代每个单词)

来自: stackoverflow.com