我有 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