从两个不同的文件中排除重复的行并生成新的?

时间:2013-12-15 18:31:41

标签: linux bash shell uniq

我有几个基于每行字数的wordlist文件。

现在,我想生成新文件,应该是:

比较第一个和第二个文件,并将第二个文件中的单词放在第一个文件中,将它们放在第三个文件中。

File_1

  

WORD1

     

WORD2

     

WORD3

     

word4

     

的word5

File_2

  

WORD1

     

WORD3

     

的word5

     

word7

     

word9

我做了几件事:

cat file.1 file.2 | sort -n | uniq -u | cat > file.3

但我明白了:

File_3

  

WORD2

     

word4

     

word7

     

word9

我也试过了:

cat file.1 file.2 | sort -n | uniq -d | cat > file.3

但我又得到了:

File_3

  

WORD1

     

WORD3

     

的word5

我还尝试了 ECHO

echo $(cat file.{1,2} | sort -n | uniq -u) > file.3

但我得到相同的词,最糟糕的是它在一行打印。

最终 File_3 应包含:

  

word7

     

word9

因为在第一个文件中找不到这些单词。

知道怎么做到这一点吗?

4 个答案:

答案 0 :(得分:3)

试试这个。

grep -F -x -v -f file.1 file.2 >file.3

答案 1 :(得分:2)

如果你的文件不大,你基本上可以把第一个文件放两次:

cat file.1 file.1 file.2 | sort -n | uniq -u | cat > file.3

但对于大文件来说这很昂贵。

或使用grep你可以实现这一点(感谢@tripleee):

grep -F -x -v -f file.1 file.2 > file.3

答案 2 :(得分:1)

也许使用awk:

$ awk 'NR==FNR{a[$0];next}!($0 in a)' file_1 file_2 > file_3
$ cat file_3
word7
word9

答案 3 :(得分:1)

您可以使用comm程序执行此操作:

comm -13 <(sort file_1) <(sort file_2)