Unix shell脚本 - 多个文件连接

时间:2016-05-03 16:56:33

标签: shell unix

考虑情景 -

文件1:

mike;john;552
mike;mike;555
john;mike;121

file2的:

aks;raj;425
man;joe;895
mike;john;552

假设file1和file2包含上述两组数据。我想把这两个文件中的数据放到另一个文件中,其中数据是uniq(意思是:file1和file2包含公共数据mike;john;552,但是当合并文件时我不想有重复文件。

我使用了命令:

cat file1 file2 | sort -u > file3

但是这只给了我共同的一行,即复制到文件3中。

也试过

cat file1 file2 | uniq > file3

不产生所需的结果。

预期产量: file3的:

mike;john;552
mike;mike;555
john;mike;121
aks;raj;425
man;joe;895

注意:file3中的数据可以是任何顺序。

请帮忙。

1 个答案:

答案 0 :(得分:0)

你的第一个命令对我有用并给出了预期的输出:

$ cat -v file1
mike;john;552
mike;mike;555
john;mike;121

$ cat -v file2
aks;raj;425
man;joe;895
mike;john;552

$ cat file1 file2 | sort -u > file3
$ cat file3
aks;raj;425
john;mike;121
man;joe;895
mike;john;552
mike;mike;555

如果您没有这样做,请使用cat -vE找出原因。以下是两个例子:

$ cat file1 file2 | sort -u
foo
foo   

$ cat file1 file2 | sort -u | cat -vE
foo$
foo   $

在这种情况下,它看起来像是重复,但由于尾随空格,这些行实际上是不同的。

$ cat file1 file2 | sort -u 
foo
foo
$ cat file1 file2 | sort -u | cat -vE
foo$
foo^M$

在这种情况下,它看起来像是重复,但是一个文件有回车,因为它是以DOS / Windows模式而不是Unix模式保存的。