2016-05-03 56 views
1

考慮scenario-Unix外殼腳本 - 多個文件串連

file1的:

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

file2的:

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

假設文件1和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的數據可以是任何順序。

請幫忙。

+2

'cat file1 file2 | sort -u'對我來說效果很好:file1和file2中的所有行合併在一起,重複行僅打印一次。 –

+0

CNR。這些工具正好符合所描述的期望行爲。 –

+0

好吧現在工作,猜猜有空白問題。謝謝! – Demon

回答

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的模式。