如何删除多个文件的重复行?

时间:2011-01-20 10:16:15

标签: perl bash awk unix

我在不同的目录和子目录中有7个具有以下名称的文件

tag0.txt, tag1.txt, tag2.txt, tag3.txt, tag01.txt, tag02.txt and tag03.txt

其中一些文件有重复的行。如何删除duplicated rows?请注意,每个文件中的行未排序,每个文件的长度范围为500到1000行。

非常感谢任何帮助。

谢谢

4 个答案:

答案 0 :(得分:4)

假设你想在每个文件的基础上删除dupes ,以下内容不需要排序文件,因此不会弄乱行的顺序:

awk '!a[$0]++' infile > outfile

由于您的文件似乎位于不同的目录中,因此最简单的方法是手动运行该命令7次。如果你真的想要,你可以像这样循环:

#!/bin/sh

for file in /path/to/file1 /path/to/file2 ... /path/to/file7; do
    awk '!a[$0]++' "$file" > "$file".new && \
    mv "$file".new "$file"
done

答案 1 :(得分:1)

使用sortuniq命令作为unix实用程序

cat "your files" | sort | uniq

答案 2 :(得分:1)

注意,确实“直接”更改文件(就地编辑)。

perl -i -ne 'print if not $seen{$ARGV}{$_}++' file1 file2 file3 ...

答案 3 :(得分:0)

bash 4.0 ++

shopt -s globstar
for file in **/tag*.txt
do
    sort $file|uniq > t && mv t $file
done