在linux中合​​并两个文件而不重复

我有两个文件file1和file2

file1的内容是

Hello how are you when can i meet you film?? 

file2的内容是

 Hello how are you darling when can i meet you 

我想生成一个文件,就像两个文件的组合

 Hello how are you darling when can i meet you film?? 

注意: file1的第二行中的空格在最后的文件中应该被忽略,在C或者Linux中有没有内置的函数可以完成上面的工作,或者可以写一个脚本来做到这一点?

这里有一个使用awk

 awk '{ gsub(/^[ \t]+|[ \t]+$/,"") } !a[$0]++' file2 file1 

结果:

 Hello how are you darling when can i meet you film?? 

编辑:

问题在于:

 awk '{ $1=$1 } !a[$0]++' file2 file1 

就是这样,虽然对于这个简单的例子来说效果很好,但是它将同样的东西视为相同的东西,因为它不仅消除了领先和滞后的空白,而且还消除字段多余的空白。 例如,如果file1包含:

 Hello how are you when can i meet you film?? 

这俩:

 when can i meet you 

和:

 when can i meet you 

线将被视为同一件事。 这可能是期望的结果,但根据你的问题,我认为最好是根据第一个命令简单地删除前导空白和滞后空白。 HTH。

awk简单工作:

 $ awk '{$1=$1}!u[$0]++' file2 file1 Hello how are you darling when can i meet you film?? 

或者如果你不关心输出的顺序:

 $ sed 's/^\s*//' file1 file2 | sort -u are you darling film?? Hello how when can i meet you 

您可以应用多个标准过滤器:

 cat file1 file2 | perl -pe 's/^\s+//' | sort | uniq 
  • cat用来连接所有需要的文件,
  • perl是删除所有最初的whote空间,
  • sort所有行,
  • uniq删除重复的行。