删除多个txt文件中的重复行

删除多个txt文件中的重复行

我有 12 个文本文件都在一个文件夹中,每个文件约有 500 万行,每个文件本身没有重复行,但多个文件中有重复行,我想删除每个文件中的重复行但仍单独保存它们,我已经尝试了很多 Linux 排序命令,它不断地将文件合并在一起,我有 Windows、Linus 和 Mac,是否有任何代码或应用程序可以执行此操作?

答案1

要删除所有重复项,但保留文件中第一个出现的重复项并从其他文件中删除,您可以按如下方式使用 awk,这也保留了行的顺序。

awk '!seen[$0]++ { print >FILENAME".new" }' file1 file2 ... file12

这里没有必要通过 awk 关闭打开的文件,因为最多有 12 个文件,但您仍然可以在每个文件处理和完成后 close() 它们。

awk '!seen[$0]++ { 
    if(prev!=FILENAME) close(prev".new");
    print >FILENAME".new";
    prev=FILENAME }
' file1 file2 ... file12

您可以使用 shell 和外部命令mv,然后将输出文件重命名为原始名称(您可以使用rename命令也是如此):

for file in ./*.new; do echo mv -v -- "$file" "${file%.new}"; done

注意:echo如果您对结果满意,请删除 。


如果您有 GNU awk,您可以使用-i inplace选项就地修改文件并简化整个命令,如下所示:

gawk -i inplace '!seen[$0]++' file1 file2 ... file12

相关内容