Compare dois fluxos de dados sem que ambos sejam armazenados como arquivos

5

Eu tenho estes dois arquivos: -

[root@localhost base_filters]# cat aix_old
joe
amadeus
image
bill
juliet
charlie
romeo
ftp


[root@localhost base_filters]# cut -d: -f1 passwd2
henry
amadeus
image
bill
julie
jennifer
charlie
romeo
harry

Estou tentando descobrir as diferenças entre dois arquivos; então estou usando o seguinte comando: -

[root@localhost base_filters]# cut -d: -f1 passwd2 | sort | diff 'sort aix_old' -

Mas recebendo o seguinte erro:

diff: extra operand 'charlie'
diff: Try 'diff --help' for more information.

Eu sei que posso usar outro arquivo temporário para classificar o conteúdo em aix_old , mas não quero outro arquivo temporário; então tentei com a substituição de comandos.

Qualquer ideia, o que eu posso estar fazendo errado.

    
por Ankit 15.04.2013 / 04:55

1 resposta

14
diff <(cut -d: -f1 passwd2 | sort) <(sort aix_old)

dá:

4,5c4
< harry
< henry
---
> ftp
7,8c6,7
< jennifer
< julie
---
> joe
> juliet
diff -y <(cut -d: -f1 passwd2 | sort) <(sort aix_old)

dá:

amadeus                              amadeus
bill                                bill
charlie                             charlie
harry                                 | ftp
henry                                 <
image                               image
jennifer                              | joe
julie                                 | juliet
romeo                               romeo

Do wiki de subestituição do processo: link

The Unix diff command normally accepts the names of two files to compare, or one file name and standard input. Process substitution allows you to compare the output of two programs directly:

$ diff <(sort file1) <(sort file2)

The <(command) expression tells the command interpreter to run command and make its output appear as a file. The command can be any arbitrarily complex shell command.

    
por 15.04.2013 / 05:22