我有两个文件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
删除重复的行。