0

我有 2 个大文本文件file1.txtfile2.txt

每个文件都包含一个行分隔的名称列表,例如

文件1.txt

Beth
james
James
paul
Paul
sally

文件2.txt

James
Paul
Sally

我想生成一个包含唯一名称的文件,file1.txt同时也忽略大小写,因此在上面的示例中,我希望生成一个如下所示的文件:

比较.txt

Beth

使用该命令comm -23 file1.txt file2.txt > comparison.txt会产生不正确的结果:

Beth
james
paul
sally

使用该-i命令也会产生不正确的结果:

Beth
James
Paul

我在这里想念什么?

4

1 回答 1

0

您可以使用Awk兼容POSIX的字符串函数tolower进行不区分大小写的查找。

awk 'FNR==NR{unique[tolower($0)]++; next}!(tolower($0) in unique)' file2.txt file1.txt
Beth

重定向到文件comparison.txt

awk 'FNR==NR{unique[tolower($0)]++; next}!(tolower($0) in unique)' file2.txt file1.txt > comparison.txt
cat comparison.txt
Beth

逻辑背后的想法是

所以我对解决方案的理解如下,

  1. FNR==NR{unique[tolower($0)]++; next}将处理file2.txt 将数组的条目存储为不区分大小写的单词,直到file2.txt.
  2. 现在file1.txt,我可以匹配其他文件中的那些行, !(tolower($0) in unique)这将给我所有那些行中 file1.txt不存在的行file2.txt

(或)如果您访问GNU grep在文件上使用否定匹配,-i请注意不敏感的查找

grep -viFxf file2.txt file1.txt
Beth
于 2017-01-21T13:05:05.797 回答