删除重复内容后尝试合并文件

时间:2011-12-01 01:54:42

标签: python linux algorithm bash

这是我的问题。

我有n个文件,它们都有重叠和常见的文字。我想使用这些n个文件创建一个文件,这样新文件只包含所有n个文件中存在的唯一行。

我正在寻找一个bash命令,python api可以为我做。如果有算法,我也可以尝试自己编码。

4 个答案:

答案 0 :(得分:3)

如果行的顺序不重要,您可以这样做:

sort -u file1 file2 ...

这将(a)对所有文件中的所有行进行排序,然后(b)删除重复项。这将为您提供所有文件中唯一的行。

答案 1 :(得分: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

这将删除文件中的所有重复行。

答案 2 :(得分:1)

这可能对您有用:

# ( seq 1 5; seq 3 7; )
1
2
3
4
5
3
4
5
6
7
# ( seq 1 5; seq 3 7; ) | sort -nu
1
2
3
4
5
6
7
# ( seq 1 5; seq 3 7; ) | sort -n | uniq -u
1
2
6
7
# ( seq 1 5; seq 3 7; ) | sort -n | uniq -d
3
4
5

答案 3 :(得分:1)

您需要首先合并所有内容,然后排序,最后删除重复项

#!/bin/bash
for file in test/*
do
cat "$file" >> final
done
sort final > final2
uniq final2 final
rm -rf final2