尝试在去重后合并文件
这是我的问题。
我有n个文件,它们里面有一些重复和相同的内容。我想要创建一个新文件,这个新文件只包含这些n个文件中独一无二的行,也就是说,新文件里不应该有重复的内容。
我在寻找一个bash命令或者python的接口,可以帮我完成这个任务。如果有算法的话,我也可以尝试自己编写代码。
4 个回答
1
你需要先把所有的内容合并在一起,然后进行排序,最后再去掉重复的部分。
下面是一个简单的脚本:
#!/bin/bash
对于 test 文件夹里的每一个文件,
做以下操作:
把这个文件的内容添加到 final 这个文件里
done
然后把 final 文件里的内容进行排序,结果保存在 final2 里。
接着,去掉 final2 里的重复内容,结果保存回 final 里。
最后,删除 final2 这个临时文件。
2
要测试一些常见的数据,你可以使用 comm
命令:
DESCRIPTION
The comm utility reads file1 and file2, which should be sorted lexically,
and produces three text columns as output: lines only in file1; lines only in
file2; and lines in both files.
另一个有用的工具是 merge
命令:
DESCRIPTION
merge incorporates all changes that lead from file2 to file3 into file1.
The result ordinarily goes into file1. merge is useful for combining separate
changes to an original.
sort
可能会打乱你的顺序。你可以试试下面的 awk
命令。这个命令还没有经过测试,所以一定要备份你的文件哦。:)
awk ' !x[$0]++' big_merged_file
这个命令会从你的文件中删除所有重复的行。
3
如果这些行的顺序不重要,你可以这样做:
sort -u file1 file2 ...
这样做会先把所有文件里的行进行排序,然后再去掉重复的行。最后你会得到所有文件中独一无二的行。