我有12个文本文件都在一个文件夹中,每个文件都有大约500万行,每个文件本身没有重复行,但是在多个文件中重复,我想删除每个文件中的重复行,但仍然单独保存它们,我尝试了许多Linux排序命令,它不断地将文件合并在一起,我有Windows、Linus和Mac,有任何代码或应用程序可以这样做吗?
发布于 2022-01-14 18:23:38
若要删除所有重复项,但保留第一个文件中的第一个副本,并从其他文件中删除,您可以使用awk如下所示,这也保留了行的顺序。
awk '!seen[$0]++ { print >FILENAME".new" }' file1 file2 ... file12这里不需要通过awk关闭打开的文件,因为最多可以关闭12个文件,但是在每个文件处理和完成后仍然可以关闭()文件。
awk '!seen[$0]++ {
if(prev!=FILENAME) close(prev".new");
print >FILENAME".new";
prev=FILENAME }
' file1 file2 ... file12您可以使用外壳和外部命令mv将输出文件重命名为原始名称(也可以使用rename命令):
for file in ./*.new; do echo mv -v -- "$file" "${file%.new}"; done注意:如果您对结果满意,请删除echo。
如果您有GNU,您可以使用-i inplace选项修改文件的位置并简化整个命令,如下所示:
gawk -i inplace '!seen[$0]++' file1 file2 ... file12https://unix.stackexchange.com/questions/686377
复制相似问题