比较 2 个文本文件和仅在 1 个文件中唯一的输出行,同时忽略大小写
Compare 2 text files and output lines unique in only 1 file while ignoring case
我有 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
我在这里错过了什么?
您可以使用 Awk
与 POSIX
兼容 string-function tolower
进行不区分大小写的查找。
awk 'FNR==NR{unique[tolower([=10=])]++; next}!(tolower([=10=]) in unique)' file2.txt file1.txt
Beth
re-direct 到文件 comparison.txt
为
awk 'FNR==NR{unique[tolower([=11=])]++; next}!(tolower([=11=]) in unique)' file2.txt file1.txt > comparison.txt
cat comparison.txt
Beth
逻辑背后的想法是
所以我对解决方案的理解如下,
FNR==NR{unique[tolower([=17=])]++; next}
将在 file2.txt
处理
将数组的条目存储为 case in-sensitive 个单词直到
file2.txt
. 结束
- 现在
file1.txt,
我可以匹配其他文件中的那些行
!(tolower([=21=]) in unique)
这将给我所有这些行
file1.txt
其行不存在于 file2.txt
(or) 如果您使用文件的否定匹配访问 GNU grep
,使用 -i
表示不区分大小写 look-up
grep -viFxf file2.txt file1.txt
Beth
我有 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
我在这里错过了什么?
您可以使用 Awk
与 POSIX
兼容 string-function tolower
进行不区分大小写的查找。
awk 'FNR==NR{unique[tolower([=10=])]++; next}!(tolower([=10=]) in unique)' file2.txt file1.txt
Beth
re-direct 到文件 comparison.txt
为
awk 'FNR==NR{unique[tolower([=11=])]++; next}!(tolower([=11=]) in unique)' file2.txt file1.txt > comparison.txt
cat comparison.txt
Beth
逻辑背后的想法是
所以我对解决方案的理解如下,
FNR==NR{unique[tolower([=17=])]++; next}
将在file2.txt
处理 将数组的条目存储为 case in-sensitive 个单词直到file2.txt
. 结束
- 现在
file1.txt,
我可以匹配其他文件中的那些行!(tolower([=21=]) in unique)
这将给我所有这些行file1.txt
其行不存在于file2.txt
(or) 如果您使用文件的否定匹配访问 GNU grep
,使用 -i
表示不区分大小写 look-up
grep -viFxf file2.txt file1.txt
Beth