6

我有两个文件 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 中是否有任何内置函数可以执行上述以下工作,或者可以编写脚本来执行此操作?

4

3 回答 3

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
于 2013-01-09T11:01:55.117 回答
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。

于 2013-01-09T12:08:42.960 回答
0

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

cat file1 file2 | perl -pe 's/^\s+//' | sort | uniq
  • cat用于连接所有需要的文件,
  • perl是 udes 删除所有初始空白空间,
  • sort对所有行进行排序,
  • uniq删除重复的行。
于 2013-01-09T11:04:36.687 回答