我有2个大文本文件file1.txt
和file2.txt
每个文件都包含一行分隔的名称列表,例如
FILE1.TXT
Beth
james
James
paul
Paul
sally
FILE2.TXT
James
Paul
Sally
我想生成一个只包含file1.txt
唯一名称的文件,同时也忽略大小写,所以在上面的例子中我想要一个生成的文件,如下所示:
comparison.txt
Beth
使用命令comm -23 file1.txt file2.txt > comparison.txt
会产生错误的结果:
Beth
james
paul
sally
使用-i
命令也会产生错误的结果:
Beth
James
Paul
我在这里缺少什么?
答案 0 :(得分: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
逻辑背后的想法是
所以我对解决方案的理解如下,
FNR==NR{unique[tolower($0)]++; next}
将在file2.txt
处理
存储数组的条目作为案例的敏感词直到
file2.txt
。file1.txt,
我可以通过执行来匹配其他文件中的这些行
!(tolower($0) in unique)
这将为我提供所有这些行
file1.txt
file2.txt
醇>
(或)如果您使用文件上的否定匹配访问GNU grep
,-i
用于护理不敏感的查找
grep -viFxf file2.txt file1.txt
Beth