我有两个文件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中是否有任何内置函数来完成上述工作,或者可以编写脚本来执行此操作?
答案 0 :(得分:4)
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
答案 1 :(得分:1)
这是使用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。
答案 2 :(得分:0)
您可以应用多个标准过滤器:
cat file1 file2 | perl -pe 's/^\s+//' | sort | uniq
cat
用于连接所有必需的文件,perl
是用来移除所有初始空间的,sort
对所有行进行排序,uniq
删除重复的行。